如何使用异步做一个HTTP GET请求,并等待
问题描述:
我试图创建一个函数,它接受一个url作为参数,并返回从中获得响应,它只是给我一个错误在WebResponse responseObject intialization
线如何使用异步做一个HTTP GET请求,并等待
唯一的例外是An exception of type 'System.Net.ProtocolViolationException' occurred in mscorlib.ni.dll but was not handled in user code
public static async Task<string> get(string url)
{
var request = WebRequest.Create(new Uri(url)) as HttpWebRequest;
request.Method = "GET";
request.ContentType = "application/json";
WebResponse responseObject = await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, request);
var responseStream = responseObject.GetResponseStream();
var sr = new StreamReader(responseStream);
string received = await sr.ReadToEndAsync();
return received;
}
答
与HttpClient的尝试它,而不是像这样:
public async Task<List<MyClass>> GetMyClassAsync(
CancellationToken cancelToken = default(CancellationToken))
{
using (HttpClient httpClient = new HttpClient())
{
var uri = Util.getServiceUri("myservice");
var response = await httpClient.GetAsync(uri, cancelToken);
return (await response.Content.ReadAsAsync<List<MyClass>>());
}
}
外观更容易写:http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx – 2013-05-14 13:47:25
HTTP客户端不支持在Windows Phone 8?! – mhyassin 2013-05-14 14:21:19
我不认为这是异步,这是你的问题。 ProtocolViolationException指向的问题是'request.ContentType',这对于GET来说并不是预期的。 – 2013-05-14 15:27:55