如何使用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;
}

如何使用async和await执行HTTP GET请求

您不能为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>>());
        }
    }