How to make the .net HttpClient use http 2.0?
asp.net, c#, http, http2, iis-10
Solution
`HttpClient` does not support HTTP/2 yet. It will be available in the next release (code name KATANA). Here is the link to their source code for the next release.
Till then, you could implement your own `HttpMessageHandler` object that implements HTTP/2 and pass it to the `HttpClient`'s constructor (you probably can use their source code from KATANA).
Problem
I have an asp.net web api hosted on IIS 10 (windows server 2016). When I make a `GET` request to this from a Microsoft Edge browser, I see that `HTTP 2.0` is used in IIS logs ``` 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 ``` However, when a `GET` request is made through a .net 4.6 client as below, ``` 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)); } } ``` I see the following `HTTP 1.1` log in the server logs ``` 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 ``` How can I make the .net client use HTTP/2.0 ?