在 ASP.NET Core 5.0 Web API 中实现 DelegatingHandler?
Posted
技术标签:
【中文标题】在 ASP.NET Core 5.0 Web API 中实现 DelegatingHandler?【英文标题】:Implement DelegatingHandler in ASP.NET Core 5.0 Web API? 【发布时间】:2021-12-17 03:05:10 【问题描述】: public class AuthenticationHandler : DelegatingHandler
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage req, CancellationToken cancellationToken)
Debug.WriteLine("Process request");
// Call the inner handler.
var response = await base.SendAsync(req, cancellationToken);
Debug.WriteLine("Process response");
return response;
解决方案文件:https://i.stack.imgur.com/M4yv6.png
我能找到的唯一答案是旧版本的 Web API,其中解决方案的结构非常不同
【问题讨论】:
AFAIK 你不应该在 ASP.NET Core 中写DelegatingHandler
,而是使用middlewares。
DelegatingHandler
仍然是使用HttpClientFactory
将管道附加到HttpClient
的相关且记录在案的方法@ - docs.microsoft.com/en-us/aspnet/core/fundamentals/…
【参考方案1】:
如果您使用 DelegatingHandler 为从您的 Web API 到另一个服务的出站请求实现横切关注点,则可以使用 HttpClientFactory 注册您的处理程序并将其附加到命名或类型化的 HttpClient:
来自https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-5.0#outgoing-request-middleware-1:
HttpClient 有委托处理程序的概念,可以链接 一起用于传出的 HTTP 请求。 IHttpClientFactory:
简化了为每个命名客户端定义的处理程序。
支持注册和链接多个处理程序以构建一个 传出请求中间件管道。这些处理程序中的每一个都能够 在发出请求之前和之后执行工作。这种模式:
类似于 ASP.NET Core 中的入站中间件管道。 提供一种机制来管理围绕 HTTP 的横切关注点 请求,例如:缓存错误处理序列化日志记录
在这种方法下,您可以将启动中的处理程序注册到 DI 容器中,以便在将其注入或实例化到服务中的某处时,将其附加到使用客户端进行的任何调用:
public void ConfigureServices(IServiceCollection services)
// ...
services.AddTransient<AuthenticationHandler>();
services.AddHttpClient<MyTypedHttpClient>(c =>
c.BaseAddress = new Uri("https://localhost:5001/");
)
.AddHttpMessageHandler<AuthenticationHandler>();
// ...
如果您将行为附加到来自 API 使用者的 Web API 入站请求,则可以改用中间件:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-5.0
【讨论】:
以上是关于在 ASP.NET Core 5.0 Web API 中实现 DelegatingHandler?的主要内容,如果未能解决你的问题,请参考以下文章
为 ASP.NET Core 5.0 - EF Core 5.0 Web App 配置 PostgreSQL 连接字符串以在 MS 或 Linux 云上运行?
Asp.Net Core Web API 5.0 和 Angular 中基于自定义角色的授权
如何按照存储库模式在 Asp.Net Core 5.0 项目上实现 .Net Core Identity?
在 ASP .NET Core 2.1 Web Api 中启用 CORS