【发布时间】:2021-01-13 13:47:43
【问题描述】:
目前我正在为 NopCommerce 构建一个发货插件。在这种特殊情况下,我必须使用目标客户端 Rest API 进行身份验证。为此,我创建了一个(测试)身份验证方法。
仅供参考:端点与 Postman 一起工作正常。例如,也更改为 PUT/Delete。也可以正常工作。只有 POST 方法被更改为 GET。总是!
此外,以下 StackOverflow 问题似乎是我目前遇到的问题,但不是解决方案。
httpClient.PostAsync() performs GET request anyway
方法:
public async Task<string> PostHttpReqMessageAsync()
{
DHLApiRequestModel model = new DHLApiRequestModel()
{
UserId = _dhlSettings.UserID,
Key = _dhlSettings.Key,
AccountNumber = new List<string>()
{
_dhlSettings.AccountNumber
}
};
string requestMessage = JsonConvert.SerializeObject(model);
HttpContent content = new StringContent(requestMessage, Encoding.UTF8, "application/json");
HttpRequestMessage httpReqMessage = new HttpRequestMessage(HttpMethod.Post, "authenticate/api-key")
{
Method = HttpMethod.Post,
Content = content
};
try
{
HttpResponseMessage httpResponseMessage = await _httpClient.SendAsync(httpReqMessage);
if (httpResponseMessage.StatusCode == System.Net.HttpStatusCode.OK)
return await httpResponseMessage.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
return ex.Message;
}
return null;
}
调试时的结果:Method: GET, RequestUri: 'http://api-dp.nl/authenticate/api-key', Version: 1.1, Content: , Headers:
【问题讨论】:
-
“调试时”具体是什么意思?您确定远程端没有将您的 POST 重定向到 GET 吗?如果这是您的代码的问题,我会感到非常惊讶——它看起来很好(您重复
HttpMethod.Post两次,但这只是气味,而不是实际问题)。您是否使用 Fiddler 来准确观察发送的内容? -
在结账时选择发货方式时,很难说 NopCommerce 使用的另一种方法调用了此方法。但是当我说调试时,我的意思是在本地主机中调试。远程端和重定向是什么意思?如何查看我是否被重定向到 Get 方法?先感谢您。还会去除异味
-
我在问您如何检查代码发出的请求。服务器可能会返回一个
303或302,并使用它来要求客户端使用不同的方法重新请求(HttpClient 将自动执行)。正如我所说,使用 Fiddler 来准确观察正在发送的请求 -
嗯。当我使用提琴手捕获流量时。我得到以下信息: HTTP: localhost:55390 /checkout/OpcSaveBilling/ localhost:55390/checkout/OpcSaveBilling 200 POST
-
看起来它正在正确发送 POST,然后?
标签: c# api post httpclient nopcommerce