Phi*_*tle 6 c# testing dotnet-httpclient .net-core asp.net-core
是否可以向由 asp.net 核心构建的添加自定义DelegationHandler(传出请求中间件)?HttpClientTestServer
我试图在联合定制的可能使用的HttpClientFactory影响HttpClients与内存测试工具TestServer:
public class ExternalProxySslDowngradeSimulator : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken token)
{
if (request.RequestUri.Scheme == "https")
request.RequestUri = new Uri(
request.RequestUri.OriginalString.Replace("https:", "http:"));
return base.SendAsync(request, token);
}
}
[TestFixture
public class TestClass
{
[Test]
public async Task CallApi()
{
var builder = new WebHostBuilder()
.ConfigureAppConfiguration((ctx, config) => { })
.UseUrl("http://customDomain.com")
.UseStartup<CustomApi.Startup>();
var testServer = new Microsoft.AspNetCore.TestHost.TestServer(builder);
var httpClient = testServer.CreateClient();
var apiResult = await httpClient.GetAsync("https://customDomain");
}
}
Run Code Online (Sandbox Code Playgroud)
我找不到一种方法将我的DelegatingHandler插入从HttpClient返回testServer.CreateClient()
到目前为止我尝试过的:
// did not work:
var builder = new WebHostBuilder()
.UseStartup<CustomApi.Startup>()
.ConfigureServices(services =>
{
services
.AddHttpClient("")
.AddHttpMessageHandler<ExternalProxySslDowngradeSimulator>();
Run Code Online (Sandbox Code Playgroud)
查看TestServer它的代码并没有连接到该管道中。
HttpClientFactoryOptions(不起作用)以为我可以绑定自定义HttpClientFactoryOptions并将自定义操作添加到HttpClientFactoryOptions.HttpMessageHandlerBuilderActions. 但是 TestServer 并没有像默认的 Http Client Factory 那样真正使用它。
TestServer(无效)查看文档/源代码没有看到任何地方可以挂钩。有一个扩展方法可以进一步控制 DI,但我没有看到如何让我挂钩到HttpMessangeHandlerTestServer 正在使用的自定义中。
因此,您要做的就是使用测试服务器(代码示例中的服务器)的 CreateHandler 方法和 HttpClientFactory.Create 方法创建自己的客户端。
var client = HttpClientFactory.Create(Server.CreateHandler(), new CustomDelegate() );
client.BaseAddress = Server.BaseAddress;
Run Code Online (Sandbox Code Playgroud)
这花了我很长时间才弄清楚。希望这对您有帮助。
所以你的例子是
var httpClient = HttpClientFactory.Create(testServer.CreateHander(), new ExternalProxySslDowngradeSimulator());
httpClient.BaseAddress = testServer.BaseAddress;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |