PostAsJsonAsync 未按预期运行

Posted

技术标签:

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

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

回购:

    创建一个 ASP.NET WebAPI 项目 (.NET Framework 4.7.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);
    
    

    创建一个控制台应用来访问 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);
    
    

    运行 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 中似乎有一个错误,可以在这里适用:***.com/q/42073484/62600 【参考方案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);

这被证明是有效的。

【讨论】:

以上是关于PostAsJsonAsync 未按预期运行的主要内容,如果未能解决你的问题,请参考以下文章

UIAlertController 未按预期运行

C#“继续”未按预期运行

多线程未按预期运行

NSPredicate - 包含未按预期运行

QRegExp 未按预期运行

对象数组未按预期运行