C#.NET客户端支持http2.0协议,并同时兼容https

public static string RquestUrl(string method, string url, string bodyData, string token = "", string contentType = "application/json")
        {
            var handler = new Http2CustomHandler();
            string response = "";
            using (var httpClient = new HttpClient(handler))
            {
                try
                {
                    Task.Run(async () =>
                    {
                        HttpMethod httpMethod = new HttpMethod(method);
                        HttpRequestMessage requestMessage = new HttpRequestMessage(httpMethod, url) { Version = new Version("2.0") };
                        //实现https
                        if (url.Contains("Https"))
                        {
                            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
                        }
                        if (bodyData != "")
                        {
                            requestMessage.Content = new StringContent(bodyData);
                        }
                        if (token != "")
                        {
                            httpClient.DefaultRequestHeaders.Add("accessToken", token);
                        }
                        httpClient.DefaultRequestHeaders.Accept.Clear();
                        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));
                        var httpResponse = httpClient.SendAsync(requestMessage, CancellationToken.None).Result;
                        response = await httpResponse.Content.ReadAsStringAsync();
                    }).Wait();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                    return e.Message;
                }

            }
            return response;
        }

 

public class Http2CustomHandler : WinHttpHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            request.Version = new Version("2.0");
            return base.SendAsync(request, cancellationToken);
        }
    }

 注:需要通过nuget添加WinHttpHandler包

以上内容参考自Stack Overflow:

c# - Make Https call using HttpClient - Stack Overflow

c# - How to make the .net HttpClient use http 2.0? - Stack Overflow

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值