Chr*_*lew 6 .net-core asp.net-core
我想围绕从我的ASP.NET核心应用程序通过HttpClient进行的所有调用包含一些时序逻辑,包括从第三方库调用.
HttpClient
在.NET Core中是否有我可以插入的东西来在每个请求上运行一些代码?
是的,它确实。HttpClient
通过DelegatingHandler
链产生HTTP请求。要拦截该HttpClient
请求,可以SendAsync
向该链中添加具有重写方法的派生处理程序。
用法:
var handler = new ExampleHttpHandler(fooService);
var client = new HttpClient(new ExampleHttpHandler(handler));
var response = await client.GetAsync("http://google.com");
Run Code Online (Sandbox Code Playgroud)
实现方式:
public class ExampleHttpHandler : DelegatingHandler
{
//register the handler itself in DI to inject dependencies
public ExampleHttpHandler(FooService service) : this(service, null)
{
}
public ExampleHttpHandler(FooService service, HttpMessageHandler innerHandler)
{
//default handler should be the last!
InnerHandler = innerHandler ?? new HttpClientHandler();
}
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
//add any logic here
return await base.SendAsync(request, cancellationToken);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1614 次 |
最近记录: |