我需要查询发送可以加密和/或压缩和/或Base64编码的响应的Web API,并且我希望将其实现为HttpMessageHandler
s链非常类似在this post中概述,但是用于Web API。
HttpClient
有HttpMessageHandler
的构造函数,因此这是一个开始。我是否必须想出一个自己链接多个处理程序的解决方案,还是有更好的选择?
答案 0 :(得分:4)
链接HttpMessageHandler
的最简单方法是从DelegatingHandler
继承,它在其构造函数中使用内部HttpMessageHandler
,并在其基本SendAsync
实现中调用它。
public class MyHandler1 : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
// do something before the inner handler runs (modify the request?)
var response = await base.SendAsync(request, cancellationToken);
// do something after the inner handler runs (modify the repsonse?)
return response;
}
}
使用其中的多个,您可以在构建HttpClient
时以任何顺序将它们链接在一起:
var client = new HttpClient(
new MyHandler1(
new MyHandler2(
new MyHandler3(...))));