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