【问题标题】:PostAsJsonAsync not acting as expectedPostAsJsonAsync 未按预期运行
【发布时间】:2018-11-08 00:34:01
【问题描述】:

我正在尝试使用 PostAsJsonAsync 调用 API,但它并没有像我预期的那样工作。

回购:

  1. 创建一个 ASP.NET WebAPI 项目 (.NET Framework 4.7.2)
  2. ValuesController中的Post方法替换为

    // POST api/values
    public async Task<IHttpActionResult> Post(string[] array)
    {
        var suffix = array == null ? "is null" : $"has {array.Length} elements";
        var message = $"`array` {suffix}";
        return Ok(message);
    }
    
  3. 创建一个控制台应用来访问 API。

    static async Task Main(string[] args)
    {
        const string url = "http://localhost:6757/api/values";
        var value = new List<string> { "a", "b" };
        var client = new HttpClient();
    
        var response = await client.PostAsJsonAsync(url, value);
        var message = await response.Content.ReadAsStringAsync();
        Console.WriteLine(message);
    
        // Do what I think PostAsJsonAsync is essentially doing
        var json = JsonConvert.SerializeObject(value);
        var content = new StringContent(json, Encoding.UTF8, "application/json");
        response = await client.PostAsync(url, content);
        message = await response.Content.ReadAsStringAsync();
        Console.WriteLine(message);
    }
    
  4. 运行 WebApi,然后运行控制台应用

预期输出:

array 有 2 个元素”

array 有 2 个元素”

实际输出:

array 为空”

array 有 2 个元素”

所以我更改了Post 方法来比较请求中的内容字符串。

public async Task<IHttpActionResult> Post()
{
    var value = await Request.Content.ReadAsStringAsync();
    return Ok();
}

他们都将value 设置为["a","b"]

那么为什么PostAsJsonAsync 没有像我认为的那样工作?

【问题讨论】:

  • 在您更改后的Post 版本中,查找两次调用之间请求标头的差异。一个设置是Transfer-Encoding: chunked 而另一个不是吗?完整框架上的 Web API 中似乎有一个错误,可以在这里适用:stackoverflow.com/q/42073484/62600

标签: c# asp.net asp.net-web-api2 dotnet-httpclient


【解决方案1】:

我遇到了类似的问题,基本上,PostAsJsonAsync()List&lt;string&gt; 序列化为"a,b"

我建议使用与您的示例相同的代码:

var json = JsonConvert.SerializeObject(value);
var content = new StringContent(json, Encoding.UTF8, "application/json");
response = await client.PostAsync(url, content);

这被证明是有效的。

【讨论】:

    猜你喜欢
    • 2014-11-12
    • 2020-06-28
    • 2012-02-18
    • 2018-01-18
    • 2012-06-14
    • 2019-03-03
    • 2012-09-21
    • 2014-07-19
    • 2014-12-08
    相关资源
    最近更新 更多