我有一个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>();发布于 2022-08-19 17:38:27
这对我在Grpc拦截器上很有用,但我把两者都作为单点添加.program.cs
builder.Services.AddSingleton<ISnackbar, SnackbarService>();
builder.Services.AddSingleton<GrpcStatusInterceptor>();可能只是DI作用域对Snackbar服务的访问阻碍了您的工作
https://stackoverflow.com/questions/73260605
复制相似问题