繁体   English   中英

如何发出 http web asyncGET 请求

[英]How to make a http web asyncGET request

我想提出一个获取请求。 这是我测试的代码:

public string Get(string uri)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
    request.AutomaticDecompression = DecompressionMethods.GZip 
                                     | DecompressionMethods.Deflate;

    using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    using(Stream stream = response.GetResponseStream())
    using(StreamReader reader = new StreamReader(stream))
    {
        return reader.ReadToEnd();
    }
}

但问题是它会冻结 GUI,我发现了这个代码:

public async Task<string> GetAsync(string uri)
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
   request.AutomaticDecompression = DecompressionMethods.GZip 
                                   | DecompressionMethods.Deflate;

   using(HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
   using(Stream stream = response.GetResponseStream())
   using(StreamReader reader = new StreamReader(stream))
   {
       return await reader.ReadToEndAsync();
   }
}

但我不擅长多任务处理。

任何帮助如何使用此功能? tnx

我不知道你想做什么,但你可以尝试删除 using,因为你只需要在导入部分添加 using 并尝试更像这样使用你的方法:

公共类 HttpHandler {

        static HttpClient client = new HttpClient();


        public async Task<string> Get(string apiURL)
        {
            HttpResponseMessage response = await client.GetAsync(apiURL);
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            return await reader.ReadToEndAsync();
        }

    }

你快到了。 您需要做的就是使用await调用GetAsync函数,您将获得所需的结果。

请不要忘记在调用函数的签名中包含async 支持您从要使用GetAsync地方获得GetText ,然后代码片段将是:

private async void GetText()
{
    string str = await GetAsync(url);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM