【发布时间】:2022-08-20 01:38:27
【问题描述】:
我有一个捕获网络连接错误的 HTTP 拦截器:
public class NetworkErrorInterceptor : DelegatingHandler
{
private readonly ISnackbar snackbar;
public NetworkErrorInterceptor(ISnackbar snackbar)
{
this.snackbar = snackbar;
}
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
// ...
try
{
Console.WriteLine($\"Network Interceptor: sending request\");
response = await base.SendAsync(request, cancellationToken);
}
catch (HttpRequestException)
{
Console.WriteLine($\"Network Interceptor: inside catch block\");
snackbar.Add(\"Network connection error\", Severity.Error, config =>
{
// ...
});
}
// ...
}
}
当这个逻辑在组件中时,我可以看到snackbar,但是当我将它移到拦截器时,它就不再起作用了。我移动它是因为它需要应用于所有请求。我可以看到控制台消息。
迪:
builder.Services.AddScoped<NetworkErrorInterceptor>();
builder.Services
.AddHttpClient(/* ... */)
.AddHttpMessageHandler<NetworkErrorInterceptor>();
标签: blazor blazor-webassembly mudblazor