4

I need to add certificate in HttpClientFactory. Old implementation with HttpClient look this:

var cookieContainer = new CookieContainer(); var handler = new HttpClientHandler { CookieContainer = cookieContainer }; var basePath = Directory.GetCurrentDirectory(); var certificatePath = Path.Combine(basePath, certPath); var fileExists = File.Exists(certificatePath); if (!fileExists) throw new ArgumentException(certificatePath); var certificate = new X509Certificate2(certificatePath, certPwd); handler.ClientCertificates.Add(certificate); using (var client = new HttpClient(handler)) { client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(accept)); client.DefaultRequestHeaders.Add("ApiKey", apiKey); var body = new { UserName = username, UserPassword = password }; var jsonBody = JsonConvert.SerializeObject(body); var content = new StringContent(jsonBody, Encoding.UTF8, contentType); var loginResponse = client.PostAsync(loginEndpoint, content).Result; } 

But when I try to get connection from ConfigurePrimaryHttpMessageHandler I can not set ClientCertificates in handler. How can resolve this ?

UPDATE

public void SetUpHttpClients(IServiceCollection services) { var loginEndpoint = Path.Combine(baseApi, "api/authentication); var fileExists = File.Exists(certificatePath); if (!fileExists) throw new ArgumentException(certificatePath); var certificate = new X509Certificate2(certificatePath, certPwd); services.AddHttpClient("TestClient", client => { client.BaseAddress = new Uri(baseApi); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(accept)); client.DefaultRequestHeaders.Add("ApiKey", apiKey); var body = new { Username = username, Password = password }; var jsonBody = JsonConvert.SerializeObject(body); var content = new StringContent(jsonBody, Encoding.UTF8, contentType); var loginResponse = client.PostAsync(loginEndpoint, content).Result; }).ConfigurePrimaryHttpMessageHandler(() => { var cookieContainer = new CookieContainer(); var handler = new HttpClientHandler { CookieContainer = cookieContainer }; handler.ClientCertificates.Add(certificate); return handler; }); 
0

1 Answer 1

6

The exception message is accurate.

Call ClientCertificates.Add(certificate); no different to how it was done before

services.AddHttpClient("TestClient", client => { client.BaseAddress = new Uri(baseApi); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(accept)); client.DefaultRequestHeaders.Add("ApiKey", apiKey); }) .ConfigurePrimaryHttpMessageHandler(() => { var handler = new HttpClientHandler { CookieContainer = cookieContainer }; handler.ClientCertificates.Add(certificate); return handler; }); 
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks you @Nkosi

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.