我有一个托管在 IIS 10 (windows server 2016) 上的 asp.net Web api。当我做一个GET
从 Microsoft Edge 浏览器请求此内容,我看到HTTP 2.0
用于 IIS 日志
2015-09-20 21:57:59 100.76.48.17 GET /RestController/Native - 443 - 73.181.195.76 HTTP/2.0 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/42.0.2311.135+Safari/537.36+Edge/12.10240 - 200 0 0 7299
然而,当一个GET
请求是通过.net 4.6 客户端 https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.118).aspx如下,
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://myapp.cloudapp.net/");
HttpResponseMessage response = await client.GetAsync("RestController/Native");
if (response.IsSuccessStatusCode)
{
await response.Content.CopyToAsync(new MemoryStream(buffer));
}
}
我看到以下内容HTTP 1.1
登录服务器日志
2015-09-20 20:57:41 100.76.48.17 GET /RestController/Native - 443 - 131.107.160.196 HTTP/1.1 - - 200 0 0 707
如何让 .net 客户端使用 HTTP/2.0 ?
1.确保您位于latest的版本Windows 10.
2.安装WinHttpHandler:
Install-Package System.Net.Http.WinHttpHandler
3.扩展WinHttpHandler to add http2.0支持:
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);
}
}
4.将上面的处理程序传递给Http客户端构造函数
using (var httpClient = new HttpClient(new Http2CustomHandler()))
{
// your custom code
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)