HttpRequestMessage.Content 在接收控制器动作时为空
HttpRequestMessage.Content is null in receiving Controller action
我看过一些类似的帖子,但所有帖子都有一些不适用于我的情况的相关细节。我有一个带有 Register 方法的现有 Shopper 服务。它基于 .NET Framework 4.6.1 Web API 构建。我有许多工作场景,其中另一个 .NET Framework 4.6.1 Web API 服务使用 HttpClient 和 HttpRequestMessage 调用 Shopper 服务。我使用 GET、PUT 和 POST 方法执行此操作,并使用
成功地将数据传递给 PUT 和 POST 方法
request.Content = new ObjectContent<MemberAddress>(memberAddress, new System.Net.Http.Formatting.JsonMediaTypeFormatter());
我现在正在开发一项新服务,该服务基于 ASP.NET Core Web API。我正在尝试在 Shopper 服务中调用 POST 操作。我正在从 IHttpClientFactory.CreateClient 获取我的 HttpClient。我认为,HttpRequestMessage 设置与我的其他调用服务中的设置相同。
var request = new HttpRequestMessage(HttpMethod.Post, updateShopperUrl);
request.Content = new ObjectContent<MemberRegistration>(memberRegistration, new System.Net.Http.Formatting.JsonMediaTypeFormatter(), "application/json");
对服务的调用如下所示:
var httpClient = _clientFactory.CreateClient();
var response = await httpClient.SendAsync(request);
我可以在调用前检查 request.Content.Value,它包含我期望的 object/data。另一端的控制器操作代码如下所示:
[Route("{shopperId}/register")]
[Route("~/api/shopper/{shopperId}/register")]
[HttpPost]
public IHttpActionResult RegisterNewMember(string shopperId, [FromBody] MemberRegistration memberRegistration)
{
但是memberRegistration 参数始终为空。 [FromBody] 属性是最近添加的,试图解决这个问题,但没有帮助。 FromBody 应该是复杂对象参数的默认行为。我可以 POST 使用 Postman 到达该端点,并且 memberRegistration 数据通过。
要么是我遗漏了一些明显的东西,要么是等式的 ASP.NET 核心调用端发生了一些不同的事情。
您似乎正在尝试 post JSON 数据
尝试稍微改变一下方法,看看是否有所不同。
var json = JsonConvert.SerializeObject(memberRegistration);
var content = new StringContent(json, Encoding.UTF8,"application/json");
var httpClient = _clientFactory.CreateClient();
var response = await httpClient.PostAsync(updateShopperUrl, content);
以上手动将对象序列化为 JSON 并将其发布到网络 API。
可能与 ObjectContent
一起使用的格式化程序存在问题
我看过一些类似的帖子,但所有帖子都有一些不适用于我的情况的相关细节。我有一个带有 Register 方法的现有 Shopper 服务。它基于 .NET Framework 4.6.1 Web API 构建。我有许多工作场景,其中另一个 .NET Framework 4.6.1 Web API 服务使用 HttpClient 和 HttpRequestMessage 调用 Shopper 服务。我使用 GET、PUT 和 POST 方法执行此操作,并使用
成功地将数据传递给 PUT 和 POST 方法request.Content = new ObjectContent<MemberAddress>(memberAddress, new System.Net.Http.Formatting.JsonMediaTypeFormatter());
我现在正在开发一项新服务,该服务基于 ASP.NET Core Web API。我正在尝试在 Shopper 服务中调用 POST 操作。我正在从 IHttpClientFactory.CreateClient 获取我的 HttpClient。我认为,HttpRequestMessage 设置与我的其他调用服务中的设置相同。
var request = new HttpRequestMessage(HttpMethod.Post, updateShopperUrl);
request.Content = new ObjectContent<MemberRegistration>(memberRegistration, new System.Net.Http.Formatting.JsonMediaTypeFormatter(), "application/json");
对服务的调用如下所示:
var httpClient = _clientFactory.CreateClient();
var response = await httpClient.SendAsync(request);
我可以在调用前检查 request.Content.Value,它包含我期望的 object/data。另一端的控制器操作代码如下所示:
[Route("{shopperId}/register")]
[Route("~/api/shopper/{shopperId}/register")]
[HttpPost]
public IHttpActionResult RegisterNewMember(string shopperId, [FromBody] MemberRegistration memberRegistration)
{
但是memberRegistration 参数始终为空。 [FromBody] 属性是最近添加的,试图解决这个问题,但没有帮助。 FromBody 应该是复杂对象参数的默认行为。我可以 POST 使用 Postman 到达该端点,并且 memberRegistration 数据通过。
要么是我遗漏了一些明显的东西,要么是等式的 ASP.NET 核心调用端发生了一些不同的事情。
您似乎正在尝试 post JSON 数据
尝试稍微改变一下方法,看看是否有所不同。
var json = JsonConvert.SerializeObject(memberRegistration);
var content = new StringContent(json, Encoding.UTF8,"application/json");
var httpClient = _clientFactory.CreateClient();
var response = await httpClient.PostAsync(updateShopperUrl, content);
以上手动将对象序列化为 JSON 并将其发布到网络 API。
可能与 ObjectContent