Abhijeet Abhijeet - 1 year ago 879
C# Question

Make Https call using HttpClient

I have been using

for making WebApi calls using C#. Seems neat & fast way compared to
. However I am stuck up while making

How can I make below code to make

HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("http://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

var task = httpClient.PostAsXmlAsync<DeviceRequest>("api/SaveData", request);

Above code works fine for making http calls. But when I change the scheme to https it does not work. Here is the error obtained:

The underlying connection was closed: Could not establish trust
relationship for the SSL/TLS secure channel.

Changing the scheme to https is: step one.

How do I supply certificate & public / private key along with C#

Answer Source

Simply specify HTTPS in the URI.

new Uri("https://foobar.com/");

Foobar.com will need to have a trusted SSL cert or your calls will fail with untrusted error.

EDIT Answer: ClientCertificates with HttpClient

WebRequestHandler handler = new WebRequestHandler();
X509Certificate2 certificate = GetMyX509Certificate();
HttpClient client = new HttpClient(handler);

EDIT Answer2: If the server you are connecting to has disabled SSL, TLS 1.0, and 1.1 and you are still running .NET framework 4.5(or below) you need to make a choice

  1. Upgrade to .Net 4.6+ (Supports TLS 1.2 by default)
  2. Add registry changes to instruct 4.5 to connect over TLS1.2 (checkout IISCrypto see Ronald Ramos comments below)
  3. Add application code to manually configure .NET to connect over TLS1.2 (see Ronald Ramos below)
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download