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<string>
序列化为"a,b"
。
我建议使用与您的示例相同的代码:
var json = JsonConvert.SerializeObject(value);
var content = new StringContent(json, Encoding.UTF8, "application/json");
response = await client.PostAsync(url, content);
这被证明是有效的。
【讨论】:
以上是关于PostAsJsonAsync 未按预期运行的主要内容,如果未能解决你的问题,请参考以下文章