gpt4 book ai didi

c# - 获取异步 HttpWebRequest 的响应

转载 作者:IT王子 更新时间:2023-10-29 04:46:08 25 4
gpt4 key购买 nike

我想知道是否有一种简单的方法来获取异步 httpweb 请求的响应。

这个问题我已经看过here但我想做的就是将响应(通常是 json 或 xml)以字符串的形式返回到另一个方法,然后我可以在其中解析它/相应地处理它。

下面是一些代码:

我这里有这两个静态方法,我认为它们是线程安全的,因为所有参数都已传入,并且这些方法没有使用共享局部变量?

public static void 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;

request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
}

private static void ReadCallback(IAsyncResult asyncResult)
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
try
{
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult))
{
Stream responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream))
{
//Need to return this response
string strContent = sr.ReadToEnd();
}
}
manualResetEvent.Set();
}
catch (Exception ex)
{
throw ex;
}
}

最佳答案

假设问题是您很难获得返回的内容,那么最简单的方法可能是使用 async/await(如果可以的话)。如果您使用的是 .NET 4.5,那么切换到 HttpClient 会更好,因为它是“ native ”异步的。

使用 .NET 4 和 C# 4,您仍然可以使用 Task 来包装它们并使其更容易访问最终结果。例如,一个选项如下。请注意,在内容字符串可用之前,它会阻塞 Main 方法,但在“真实”场景中,您可能会将任务传递给其他东西,或者将另一个 ContinueWith 从它串起来或其他任何东西。

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<string> 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<WebResponse> 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;
}
}

关于c# - 获取异步 HttpWebRequest 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com