我在我的应用程序中注册了一个名为 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);
我似乎无法访问任何以 _ 开头的参数
不可能开箱即用,但您可以使用 System.Reflections
中的
FieldInfo.class来获取所需信息:
_client = httpClientFactory.CreateClient(_settings.Name);
var handler = _client.BaseType.GetField("_handler", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(_client) as HttpClientHandler;
通过该过程,您应该能够获取默认情况下不可访问的其他字段。您只需要确定该属性来自哪个类/类型。
我成功了,因为上面的方法对我不起作用。
var handler = (HttpClientHandler)typeof(HttpClient).BaseType.GetField("_handler", BindingFlags.NonPublic | BindingFlags.Instance |BindingFlags.FlattenHierarchy).GetValue(client);
部分受益于this