以下是我的一个控制器的简单操作方法:
[HttpPost]
public async Task<dynamic> UnitTest()
{
var httpClient = new HttpClient();
dynamic model1 = new ExpandoObject();
model1.title = "foo";
model1.body = "bar";
model1.userId = 1;
var request = JsonConvert.SerializeObject(model1);
var url = "https://jsonplaceholder.typicode.com/posts";
var response = await httpClient.PostAsync(url,
new StringContent(request, Encoding.UTF8, "application/json"));
return response;
}
我希望
response
包含类似的对象{
id: 101,
title: 'foo',
body: 'bar',
userId: 1
}
根据https://github.com/typicode/jsonplaceholder#how-to。相反,response是具有以下属性的对象:
Content (empty)
StatusCode: 201
ReasonPhrase: "Created"
Version: 1.1
我究竟做错了什么?
最佳答案
response.Content
是流内容,您应该在执行返回操作之前先阅读流。
var content = await response.Content.ReadAsStringAsync();
完成动作看起来像;
[HttpPost]
public async Task<string> UnitTest()
{
var httpClient = new HttpClient();
dynamic model1 = new ExpandoObject();
model1.title = "foo";
model1.body = "bar";
model1.userId = 1;
var request = JsonConvert.SerializeObject(model1);
var url = "https://jsonplaceholder.typicode.com/posts";
var response = await httpClient.PostAsync(url,
new StringContent(request, Encoding.UTF8, "application/json"));
var content = await response.Content.ReadAsStringAsync();
return content;
}
同样,最好将返回的json反序列化为已知类型。
关于c# - 回复后没有预期的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48541382/