【问题标题】:MudBlazor - Show snackbar from a HTTP message handlerMudBlazor - 显示来自 HTTP 消息处理程序的快餐栏
【发布时间】: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


    【解决方案1】:

    这适用于 Grpc 拦截器,但我将两者都添加为单例... 程序.cs

            builder.Services.AddSingleton<ISnackbar, SnackbarService>();
            builder.Services.AddSingleton<GrpcStatusInterceptor>();
            
    

    可能只是对 Snackbar 服务的 DI 范围访问阻碍了您

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2020-11-04
      • 2018-06-03
      • 2015-05-26
      • 1970-01-01
      • 2015-04-23
      相关资源
      最近更新 更多