【问题标题】:PostAsJsonAsync posts nullPostAsJsonAsync 发布 null
【发布时间】:2019-11-14 11:18:29
【问题描述】:

我正在尝试使用 PostAsJsonAsync 发布对象,但在接收 API 中它始终为空。调用代码在这里:

    public async Task UploadDocument(FileDto model)
    {
        var response = await _httpClient.PostAsJsonAsync("file/UploadDocument", model);
        response.EnsureSuccessStatusCode();
    }

接收代码的签名在这里:

    [HttpPost]
    [Route("UploadDocument")]
    public async Task<IHttpActionResult> UploadDocument(FileDto document)

FileDto 在两个项目中是相同的,并且只包含一个字符串属性“FileName”

问题是文档总是为空。

我可以使用 PostAsync 工作正常:

    public async Task UploadDocument(FileDto model)
    {
        string inputJson = Newtonsoft.Json.JsonConvert.SerializeObject(model);
        HttpContent inputContent = new StringContent(inputJson, Encoding.UTF8, "application/json");
        var response = await _httpClient.PostAsync("file/UploadDocument", inputContent);
        response.EnsureSuccessStatusCode();
    }

查看 Fiddler,第一个(不工作)示例,请求如下所示:

POST http://localhost:59322/api/file/UploadDocument HTTP/1.1
Accept: application/json
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Host: localhost:59322

28
{"FileName":"File-0000004157.jpg"}
0

第二个(工作)示例在 Fiddler 中如下所示:

POST http://localhost:59322/api/file/UploadDocument HTTP/1.1
Accept: application/json
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Host: localhost:59322


{"FileName":"File-0000004157.jpg"}

第一个示例似乎添加了额外的文本 - 请参阅“28”和“0”。

这段文字来自哪里。我可以使用 PostAsync,但是当 PostAsJsonAsync 为您添加额外的代码时,这似乎很可惜。

有人有什么想法吗?

【问题讨论】:

    标签: asp.net-core dotnet-httpclient


    【解决方案1】:

    你需要在 asp.net core 中返回 IActionResult 而不是 IHttpActionResult

    [HttpPost]
    [Route("UploadDocument")]
    public async Task<IActionResult> UploadDocument(FileDto document)
    {
        return Ok(document);
    }
    

    https://docs.microsoft.com/en-us/aspnet/core/migration/webapi?view=aspnetcore-3.0

    ASP.NET Core Web Api Error for IhttpActionResult

    【讨论】:

    • 嗨,对不起,忘了提到该方法在 .NET Framework 应用程序中。调用应用程序是 .NET Core
    • @Richard Clarke 我用asp.net core web api用httpclient PostAsJsonAsync调用asp.net web api好像没问题。你在一个全新的项目里试过吗?
    【解决方案2】:

    .net core 中的 PostAsJsonAsync 似乎存在问题:它返回 0 的 content-length 导致接收端忽略 declared empty 正文。

    https://github.com/aspnet/AspNetWebStack/issues/252

    HttpClient PostAsJsonAsync behaving different in .NET Core and Classic .NET

    解决方法是使用...PostAsync

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多