以下是我的一个控制器的简单操作方法:

[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/

10-12 07:39
查看更多