标签: httpclienthandler

如何将 HttpClientHandler 传递给现有的 HttpClient?

我是HttpClient httpClient从课外注射的。

在我的类中,我正在创建一个新的 HttpClientHandlervar handler = new HttpClientHandler()并设置其值。

我需要链接HttpClientHandler到现有的,HttpClient就像使用构造函数一样:new HttpClient(handler)

是否可以?我尝试在其中寻找HttpClientHandler财产HttpClient,但它不存在。还有其他办法吗?

.net c# dependency-injection httpclient httpclienthandler

9
推荐指数
0
解决办法
3504
查看次数

从 HttpClient 实例访问 HttpClientHandler?

当使用 HttpClient 实例和 HttpClientHandler 实例(.Net Framework,不使用 Core)时,是否可以稍后以任何方式访问 HttpClientHandler 实例/它的属性(用于只读目的)?

不幸的是,创建 HttpClientHandler 实例作为变量供以后引用是不可能的,因为 HttpClient 实例作为参数传递给库,我们无法更改调用客户端。

例如,我想实现这样的目标:

// Created in client we cant modify   
var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = True, PreAuthenticate = True });

// Class we can modify
public void DoSomething(HttpClient client)
{
    if (client.HttpClientHandler.UseDefaultCredentials == True) Console.WriteLine("UseDefaultCredentials: True");
}
Run Code Online (Sandbox Code Playgroud)

.net c# httpclient httpclienthandler

6
推荐指数
1
解决办法
889
查看次数

对多个端点使用 HttpClient 和 HttpClientHandler 的最佳实践是什么?

使用HttpClient并不像我希望的那么简单。尽管它是一种IDisposable类型,但将其包装在声明中并不是最佳实践using,甚至将其设置为单例也是理想的选择。HttpClientHandler但是,当您将 a 传递给类似的构造函数时会怎么样HttpClient

using (var client = new HttpClient(singletonHttpClientHandler, false);
Run Code Online (Sandbox Code Playgroud)

我见过像上面这样的代码,其中HttpClient故意将 包裹在using语句中,但HttpClientHandler是单例。文档表明客户端处理程序已被处理,除非第二个参数指示false如上面所做的那样:

在此输入图像描述

请参阅https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.8#constructors

使用 HttpClient 的部分问题是一些事情,比如超时必须与该 HttpClient 的所有实例共享,因此出于这个原因,最好创建使用 HttpClientHandler 提供的相同连接池的单独的 HttpClient 实例(假设这就是它的工作原理)。我担心的是,我不希望 HttpClient 创建一个连接池,然后每次都会将其释放。有很多帖子讨论了这对性能有何影响。我似乎找不到任何关于有效使用 HttpClient 和 HttpClientHandlers 的好的文档。

所以...我的问题基本上是:

当一起使用 HttpClient 和 HttpClientHandler 时,是否最好将 HttpClientHandler 设为单例,然后using每次在块中实例化尽可能多的新 HttpClient?-- 这又只有当连接池由 HttpClientHandler 管理时才有意义,我认为就是这种情况。

c# dotnet-httpclient httpclienthandler

5
推荐指数
0
解决办法
2217
查看次数

在 .NET Core 2.2 中使用 SocketsHttpHandler 并忽略证书验证

使用HttpClientHandler,我们可以设置服务器验证回调并返回 true(通过写出或使用DangerousAcceptAnyServerCertificateValidator)。在升级到 .NET Core 2.2 后切换HttpClient到使用时,如何确保也绕过此验证SocketsHttpHandler?这是默认值吗?我目前找不到关于此主题的太多信息,我将部署到我希望避免进行重大更改的环境中。

c# certificate httpclient .net-core httpclienthandler

1
推荐指数
1
解决办法
891
查看次数