【发布时间】:2020-09-28 13:39:58
【问题描述】:
我有一个名为 AddHeadersHandler 的 HTTP 消息处理程序,它扩展了 System.Net.Http.DelegatingHandler,我需要将它添加到所有当前和未来的 HttpClient 实例,包括类型化、命名和非命名客户端。
我知道我可以使用.AddHttpMessageHandler<AddHeadersHandler>() 为特定客户端添加处理程序,但如何将其添加到所有客户端?
// AddHeadersHandler.cs
public class AddHeadersHandler: DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.TryAddWithoutValidation("X-Correlation-Id", Guid.NewGuid.ToString());
return base.SendAsync(request, cancellationToken);
}
}
// Startup.cs
services
.AddHttpContextAccessor()
.AddTransient<AddHeadersHandler>();
services
.AddHttpClient<MyClient>()
.AddHttpMessageHandler<AddHeadersHandler>(); // I don't want to specify this for each client.
// MyClient.cs
public class MyClient
{
public HttpClient HttpClient { get; }
public MyClient(HttpClient httpClient)
{
HttpClient = httpClient;
}
public async Task GetTest()
{
await HttpClient.GetAsync("https://localhost:5001/test"); // This should have headers attached.
}
}
【问题讨论】:
标签: c# asp.net-core .net-core dotnet-httpclient