C# 在何处为测试和Live配置HttpClient
这听起来像是一个非常基本和常见的问题,但我找不到明确的答案,我尝试了各种方法。我正在使用ASP.NET内核。我想配置HttpClient,其中包括将SslProtocol设置为Tls12 这将不起作用,因为C# 在何处为测试和Live配置HttpClient,c#,asp.net-core,dependency-injection,asp.net-core-mvc,dotnet-httpclient,C#,Asp.net Core,Dependency Injection,Asp.net Core Mvc,Dotnet Httpclient,这听起来像是一个非常基本和常见的问题,但我找不到明确的答案,我尝试了各种方法。我正在使用ASP.NET内核。我想配置HttpClient,其中包括将SslProtocol设置为Tls12 这将不起作用,因为services.AddHttpClient要求类通过注入获取HttpClient public class BluePayHttpClient : HttpClient { public BluePayHttpClient() : base(new HttpClientHandler
services.AddHttpClient
要求类通过注入获取HttpClient
public class BluePayHttpClient : HttpClient
{
public BluePayHttpClient() : base(new HttpClientHandler()
{
AllowAutoRedirect = false,
CheckCertificateRevocationList = true,
SslProtocols = System.Security.Authentication.SslProtocols.Tls12
})
{ }
}
如果我通过注射获取HttpClient。。。那么我无法在这里设置这些设置!因为HttpClientHandler必须在HttpClient的构造函数中设置
然后我可以在启动时设置这些设置,但是
services
.AddHttpClient<IPaymentProcessor, PaymentProcessor>(c => {
c.BaseAddress = new Uri("http://localhost:5000");
//other client configuration here.
})
.ConfigurePrimaryHttpMessageHandler(() => {
//configure handler
return new HttpClientHandler() {
AllowAutoRedirect = false,
CheckCertificateRevocationList = true,
SslProtocols = System.Security.Authentication.SslProtocols.Tls12
};
});
服务
.AddHttpClient(c=>{
c、 BaseAddress=新Uri(“http://localhost:5000");
//其他客户端配置在这里。
})
.ConfigurePrimaryHttpMessageHandler(()=>{
//配置处理程序
返回新的HttpClientHandler(){
AllowAutoRedirect=false,
CheckCertificatereJournalist=true,
SslProtocols=System.Security.Authentication.SslProtocols.Tls12
};
});
参考文献
配置也可以在其特定模块中完成,并通过在启动时调用的扩展方法公开。阅读后,这里有一个更好的方法(您可能需要仔细阅读) 使用
Microsoft.AspNetCore.Mvc.Testing
包可以构建依赖注入容器,从而像运行live一样测试服务配置链
好处:
- 无需复制HttpClient配置代码
- 它测试整个DI容器配置
- 它允许测试网页和控制器;或者测试常规课程
- 泛型类库测试项目必须链接到前端Web项目才能读取配置,即使它被多个项目使用
- 类库测试项目不能在其他web项目中使用
总的来说。。。这似乎是一个很好的解决方案。我就是这么做的;在意识到连接不能用于集成测试之前。此外,这使我无法指定PaymentProcessor的作用域。它变成单身了吗?我可以回去复制配置代码,但一定有更好的方法吗?除非我调用启动代码作为集成测试的一部分。