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

一起使用的格式化程序存在问题