Par*_*a99 3 blazor blazor-webassembly
在 Angular 中,有 HTTP拦截器功能。如何在 Blazor WASM 中实现相同的目标?
(拦截器的顺序很重要)
您可以使用委托处理程序。创建一个新类扩展DelegatingHandler:
public class MyDelegatingHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// before request
var response = await base.SendAsync(request, cancellationToken);
// after request
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Program.cs中注册:
using Microsoft.Extensions.DependencyInjection;
...
builder.Services.AddTransient<MyDelegatingHandler>();
builder.Services
.AddHttpClient("ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<MyDelegatingHandler>();
Run Code Online (Sandbox Code Playgroud)
来自文档:
可以按照它们应执行的顺序注册多个处理程序。每个处理程序都会包装下一个处理程序,直到最后一个处理HttpClientHandler程序执行请求:
using Microsoft.Extensions.DependencyInjection;
...
builder.Services.AddTransient<SampleHandler1>();
builder.Services.AddTransient<SampleHandler2>();
builder.Services.AddHttpClient("MultipleHttpMessageHandlers")
.AddHttpMessageHandler<SampleHandler1>()
.AddHttpMessageHandler<SampleHandler2>();
Run Code Online (Sandbox Code Playgroud)
在前面的代码中,SampleHandler1首先运行,在 之前SampleHandler2。
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |