flurl - 我可以使用 SocketHttpHandler 代替 HttpMessageHandler 吗?
问题描述
Flurl 默认配置为使用HttpMessageHandler。但是,我的应用程序使用 .NET Core 3.1,我知道这个框架对新的SocketHttpHandler类有更好的支持。那么我可以创建一个这样的自定义类吗?
public class CustomHttpClientFactory : DefaultHttpClientFactory
{
#region Overrides of DefaultHttpClientFactory
/// <summary>
/// Override in custom factory to customize the creation of HttpClientHandler used in all Flurl HTTP calls.
/// In order not to lose Flurl.Http functionality, it is recommended to call base.CreateMessageHandler and
/// customize the result.
/// </summary>
public override HttpMessageHandler CreateMessageHandler() => new SocketsHttpHandler
{
AllowAutoRedirect = false,
ConnectTimeout = TimeSpan.FromMinutes(1),
PooledConnectionLifetime = TimeSpan.FromMinutes(1),
PooledConnectionIdleTimeout = TimeSpan.FromMinutes(1),
MaxConnectionsPerServer = 20,
SslOptions = new SslClientAuthenticationOptions
{
AllowRenegotiation = false,
RemoteCertificateValidationCallback = (sender, certificate, chain, errors) => true
}
};
#endregion
}
和OnStartup中的配置
FlurlHttp.ConfigureClient(AppConstants.ServiceUrl, cli =>
{
cli.BaseUrl = AppConstants.ServiceUrl;
cli.Configure(settings =>
{
settings.ConnectionLeaseTimeout = TimeSpan.FromSeconds(60);
settings.Timeout = TimeSpan.FromSeconds(60);
settings.HttpClientFactory = new CustomHttpClientFactory();
}).WithHeaders(headers);
});
解决方案
HttpMessageHandler
是一个抽象类。Flurl 默认使用的实现是HttpClientHandler
. 我猜这就是你想要换掉的SocketsHttpHandler
。
幸运的是,.NET 团队也更喜欢后一种实现,这就是为什么HttpClientHandler
现在将其所有工作委托给SocketsHttpHandler
.
换句话说,如果您在支持SocketsHttpHandler
(.NET Core 2.1 或更高版本)的平台上,则默认使用它。不需要定制工厂。
也就是说,如果您需要使用一些自定义配置来初始化处理程序,那么我认为您所做的很好。
推荐阅读
- r - 创建矩阵来表示多个栅格的值?
- javascript - 如果我将一个反应组件包装在一个大的反应组件中,它们会共享道具吗
- javascript - 在 React JS 中使用另一个组件内的组件导航
- c# - 使用 Canvas 作为 ItemsPanel 的 Itemscontrol 的 WPF 数据绑定问题
- sql - PostgreSQL 中的 WHERE 和 FILTER (WHERE) 有什么区别?
- python - 如何从 html 代码中抓取“标记”文本
- python - OPTIONALLY ENCLOSED BY '"' 使 \\n 变得无效
- r - 为什么 rmarkdown 基于最小值的位数对列进行舍入?
- node.js - 使用环境变量从 Scala 应用程序启动节点服务器
- selenium - Selenium 重新加载到主页后没有第二次点击