我正在尝试使用PostAsJsonAsync
调用API,但无法正常工作。
回购:
将Post
中的ValuesController
方法替换为
// 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
为什么不能像我认为的那样工作?
答案 0 :(得分:0)
我遇到了类似的问题,基本上,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);
证明有效。