c# - HttpRequestMessage 总是会产生一个 GET 方法
问题描述
目前我正在为 NopCommerce 构建一个发货插件。在这种特殊情况下,我必须使用目标客户端 Rest API 进行身份验证。为此,我创建了一个(测试)身份验证方法。
仅供参考:端点与 Postman 一起工作正常。例如,也更改为 PUT/Delete。也可以正常工作。只有 POST 方法被更改为 GET。总是!
此外,以下 StackOverflow 问题似乎是我目前遇到的问题,但不是解决方案。
httpClient.PostAsync() 无论如何都会执行 GET 请求
方法:
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;
}
调试时的结果:方法:GET,RequestUri:'http://api-dp.nl/authenticate/api-key',版本:1.1,内容:,标题:
解决方案
感谢canton7我有一个解决方案/修复。问题和解决方案都很奇怪,但现在似乎有效。
PostHttpReqMessageAsync()
实际 HttpClient的方法是由 Parent 方法触发的,而 Parent 方法又是由 NopCommerce 本机方法GetShippingOptionResponse()
触发的。GetShippingOptions()
所以我而不是:
return _dhlService.GetShippingOptionResponse(getShippingOptionRequest);
我做了:
var options = _dhlService.GetShippingOptionResponse(getShippingOptionRequest);
return options;
似乎现在可以工作
实际问题?可能是 301。我在做 POST 方法,而 NopCommerce 正在做 GET 方法。我猜这导致我重定向。
推荐阅读
- angular - Angular:是否可以在生成组件时自动向路由模块添加路由指令?
- c++ - sql 选择顺序的强制转换规范的字符值无效
- vue.js - Vue Tables 2 自定义行样式
- vue.js - 登录时Vuetify v-text-field自动完成显示问题
- javascript - Express路由器中的请求参数
- python - 如何在python中列出所有Faker方法
- java - 突然之间,谷歌登录无法在少数设备上运行,比如一加和三星 Galaxy
- php - 如何计算 hmax sha1 加密的摘要值
- algorithm - 检查哪些三角形与凸包相交
- javascript - 如何使用ajax将两个值从控制器传输到视图