【发布时间】: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 中似乎有一个错误,可以在这里适用:stackoverflow.com/q/42073484/62600
标签: c# asp.net asp.net-web-api2 dotnet-httpclient