首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从PostAsJsonAsync获取响应

从PostAsJsonAsync获取响应
EN

Stack Overflow用户
提问于 2013-03-04 23:45:28
回答 6查看 89.6K关注 0票数 33

我有这行代码

代码语言:javascript
复制
var response = new HttpClient().PostAsJsonAsync(posturi, model).Result;

被调用的WebAPI控制器返回一个布尔值以确保对象被保存,但是我如何返回该布尔值响应呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-04 23:50:23

继续从内容中获取:

代码语言:javascript
复制
var httpClient = new HttpClient();
var response = httpClient.PostAsJsonAsync(posturi, model).Result;
bool returnValue = response.Content.ReadAsAsync<bool>().Result;

但是,对于快速获得结果的方法来说,这真的是一种幼稚的方法。PostAsJsonAsyncReadAsAsync不是为此而设计的,它们是为支持async await编程而设计的,因此您的代码应该是:

代码语言:javascript
复制
var httpClient = new HttpClient();
var response = await httpClient.PostAsJsonAsync(posturi, model);
bool returnValue = await response.Content.ReadAsAsync<bool>();

此外,与使用标志检查对象是否保存不同,您应该通过返回200 OK来使用HTTP码来确定保存是否成功。

票数 70
EN

Stack Overflow用户

发布于 2014-03-24 02:40:42

接受的答案在技术上是正确的,但会阻止当前线程调用.Result。如果您使用的是.NET 4.5或更高版本,那么在几乎所有情况下都应该避免这种情况。相反,使用等效的异步(非阻塞)版本:

代码语言:javascript
复制
var httpClient = new HttpClient();
var response = await httpClient.PostAsJsonAsync(posturi, model);
bool returnValue = await response.Content.ReadAsAsync<bool>();

请注意,包含上述代码的方法需要被标记为async,并且其本身应该被标记为await

票数 40
EN

Stack Overflow用户

发布于 2013-05-03 16:58:15

因为它是异步操作,所以不会立即执行.Result,因为它是错误的

相反,您需要通过执行以下操作来异步完成此操作:

代码语言:javascript
复制
    var httpClient = new HttpClient()

    var task = httpClient.PostAsJsonAsync(posturi, model)
                         .ContinueWith( x => x.Result.Content.ReadAsAsync<bool>().Result);

    // 1. GETTING RESPONSE - NOT ASYNC WAY
    task.Wait(); //THIS WILL HOLD THE THREAD AND IT WON'T BE ASYNC ANYMORE!
    bool response = task.Result

    // 2. GETTING RESPONSE - TASK ASYNC WAY (usually used in < .NET 4.5 
    task.ContinueWith( x => {
                              bool response = x.Result
                          });

    // 3. GETTING RESPONSE - TASK ASYNC WAY (usually used in >= .NET 4.5 
    bool response = await task;

注意:我只是在这里写了它们,所以我实际上并没有测试它们,但或多或少这就是你想要的。

我希望它能有所帮助!

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15205389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档