WebApi HttpClient DelegatingHandler 请求通过一系列管道 请求发送前和响应接收后被执行

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace WebApi
{
class Program
{
static void Main(string[] args)
{
HttpMessageHandler handler = new HttpClientHandler();
handler = new BazHandler { InnerHandler = handler };
handler = new BarHandler { InnerHandler = handler };
handler = new FooHandler { InnerHandler = handler };
HttpClient httpClient = new HttpClient(handler);
HttpResponseMessage response = httpClient.GetAsync("http://www.asp.net").Result;
Console.Read();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WebApi
{
public class ClientHandlerBase : DelegatingHandler
{
protected virtual void BeforeSendRequest(HttpRequestMessage request)
{
Console.WriteLine(string.Format("{0}.BeforeSendRequest()", this.GetType().Name));
}
protected virtual void AfterReceiveResponse(HttpResponseMessage response)
{
Console.WriteLine(string.Format("{0}.AfterReceiveResponse()", this.GetType().Name));
}
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
this.BeforeSendRequest(request);
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
this.AfterReceiveResponse(response);
return response;
}
}
public class FooHandler : ClientHandlerBase
{ }
public class BarHandler : ClientHandlerBase
{ }
public class BazHandler : ClientHandlerBase
{ }
}
也可以通过 Factory来创建
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace WebApi
{
class Program
{
static void Main(string[] args)
{
HttpClient httpClient = HttpClientFactory.Create(new FooHandler(), new BarHandler(), new BazHandler());
HttpResponseMessage response = httpClient.GetAsync("http://www.asp.net").Result;
Console.Read();
}
}
}

浙公网安备 33010602011771号