【问题标题】:httpClient GET call is not letting me return a valuehttpClient GET 调用不让我返回值
【发布时间】:2016-02-09 23:33:14
【问题描述】:

我正在使用 httpclient 进行 api 调用,但是当使用 async 时,该类只能为 void,因此我试图弄清楚如何将值返回到我的 Controller 并返回到视图。

public async void GetResult(){
using(var httpClient = new HttpClient()){
 var httpResponse = await httpClient.GetAsync(requestMessage);
 var responseContent = await httpResponse.Content.ReadAsStringAsync();
}
}

现在我有了 responseContent(value),我想将它返回给我的控制器,但每次我尝试删除 void 时,它都会说 async 仅适用于 void。

【问题讨论】:

    标签: c# asp.net asp.net-web-api


    【解决方案1】:

    如果您有异步方法,则返回值应始终为Task<T>。因此,如果您的响应内容是string,您的代码将如下所示:

    public async Task<string> GetResult(){
        using(var httpClient = new HttpClient()){
            var httpResponse = await httpClient.GetAsync(requestMessage);
            return await httpResponse.Content.ReadAsStringAsync();
        }
    }
    

    【讨论】:

    • 当我使用 Task 时,await 永远不会完成,但是当我使用 void 时,数据会返回到 responseContent。它会命中 var httpResponse = await... 并且永远不会完成。 @Ion Sapoval
    • 这是 ASP.NET 中的 HttpClient 的问题 下面的问题可以提供更多的细节:stackoverflow.com/questions/9895048/…stackoverflow.com/questions/10343632/…
    • 非常感谢 Kenneth 提供的帮助以及指向其他帖子的链接。
    【解决方案2】:

    异步方法的返回类型必须为 void,TaskTask&lt;T&gt;

     public async Task<string> GetResult(){
        using(var httpClient = new HttpClient()){
          var httpResponse = await httpClient.GetAsync(requestMessage);
          var responseContent = await httpResponse.Content.ReadAsStringAsync();
          return responseContent;
    }
    
    }
    

    【讨论】:

    • 我不知道你是否从之前的评论中收到了我的@,但我解释说,当我使用 Task 时,数据永远不会出现,但当我使用 void 时,它会以 responseContent 的值结束。跨度>
    • 三者中,只有在非常有限的情况下(例如不能返回值的事件处理程序)才应该是void
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2012-09-26
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多