如何使用async和await执行HTTP GET请求
本文关键字:HTTP GET 请求 执行 await 何使用 async | 更新日期: 2023-09-27 18:13:23
我试图创建一个函数,它以url为参数并返回GET响应,它只是给我一个错误在WebResponse responseObject intialization
行
例外是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;
}
您不能为GET请求设置ContentType
,因为您没有向服务器发送任何数据。
Content-Type =请求正文的MIME类型(用于POST和PUT请求)。
这是你的ProtocolViolationException
的来源。
看起来你想设置Accept
头。
Accept =响应可接受的内容类型
(根据维基百科)
试着把你的代码改成:
request.Accept = "application/json";
用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>>());
}
}