如何检查证书是否已应用在命名的 HttpClient 中?

问题描述 投票:0回答:2

我在我的应用程序中注册了一个名为 HttpClient 的应用程序。我想在使用此客户端之前添加一个测试,以确保它已应用证书。

var clientCertificate = new X509Certificate2(pathToCert, passwordToCert);

var handler = new HttpClientHandler();
handler.ClientCertificates.Add(clientCertificate);

services.AddHttpClient(name, client =>
     {
     client.BaseAddress = new Uri(hostName);
     client.DefaultRequestHeaders.Add("Accept", "application/json");
     client.DefaultRequestHeaders.Add("User-Agent", userAgent);
     }).ConfigurePrimaryHttpMessageHandler(() => handler)
       .UseHttpClientMetrics()
       .SetHandlerLifetime(TimeSpan.FromMinutes(5)) //Set lifetime to five minutes
       .AddPolicyHandler(RetryPolicy.GetRetryPolicy());

问题是我似乎无法在客户端对象中的任何地方找到它说它具有消息处理程序。

_client = httpClientFactory.CreateClient(_settings.Name);

我似乎无法访问任何以 _ 开头的参数

c# .net dotnet-httpclient
2个回答
1
投票

不可能开箱即用,但您可以使用 System.Reflections 中的

FieldInfo.class
来获取所需信息:

_client = httpClientFactory.CreateClient(_settings.Name);
var handler = _client.BaseType.GetField("_handler", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(_client) as HttpClientHandler;
        

通过该过程,您应该能够获取默认情况下不可访问的其他字段。您只需要确定该属性来自哪个类/类型。


0
投票

我成功了,因为上面的方法对我不起作用。

var handler = (HttpClientHandler)typeof(HttpClient).BaseType.GetField("_handler", BindingFlags.NonPublic | BindingFlags.Instance |BindingFlags.FlattenHierarchy).GetValue(client);
    

部分受益于this

© www.soinside.com 2019 - 2024. All rights reserved.