Getting the Response of a Asynchronous HttpWebRequest

前端 未结 4 1148
[愿得一人]
[愿得一人] 2020-12-01 02:53

Im wondering if theres an easy way to get the response of an async httpwebrequest.

I have already seen this question here but all im trying to do is return the respo

4条回答
  •  失恋的感觉
    2020-12-01 03:55

    Assuming the problem is that you're having a hard time getting to the returned content, the easiest path would likely be using async/await if you can use it. Even better would be to switch to HttpClient if you're using .NET 4.5 since it's 'natively' async.

    Using .NET 4 and C# 4, you can still use Task to wrap these and make it a bit easier to access the eventual result. For instance, one option would be the below. Note that it has the Main method blocking until the content string is available, but in a 'real' scenario you'd likely pass the task to something else or string another ContinueWith off of it or whatever.

    void Main()
    {
        var task = MakeAsyncRequest("http://www.google.com", "text/html");
        Console.WriteLine ("Got response of {0}", task.Result);
    }
    
    // Define other methods and classes here
    public static Task MakeAsyncRequest(string url, string contentType)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContentType = contentType;
        request.Method = WebRequestMethods.Http.Get;
        request.Timeout = 20000;
        request.Proxy = null;
    
        Task task = Task.Factory.FromAsync(
            request.BeginGetResponse,
            asyncResult => request.EndGetResponse(asyncResult),
            (object)null);
    
        return task.ContinueWith(t => ReadStreamFromResponse(t.Result));
    }
    
    private static string ReadStreamFromResponse(WebResponse response)
    {
        using (Stream responseStream = response.GetResponseStream())
        using (StreamReader sr = new StreamReader(responseStream))
        {
            //Need to return this response 
            string strContent = sr.ReadToEnd();
            return strContent;
        }
    }
    

提交回复
热议问题