.NET 和 Blazor 8 - 在交互式服务器页面上处理没有 ErrorBoundary 的异常?

问题描述 投票:0回答:1

我有一个 Blazor 和 .NET 8 Web 应用程序,它使用交互式服务器模式来呈现其页面。

是否可以添加一个全局处理程序,在显示默认的黄色“发生错误。重新加载”错误消息之前捕获未处理的异常?

我确实相信我可以通过 ErrorBoundary 实现这一目标,但为了灵活性,我还被要求调查并考虑其他选项。

我研究了中间件,尝试了下面的代码(取自UseExceptionHandler Blazor 服务器端不工作),但它不起作用。我希望这与链接问题中给出的原因相同。

如果 ErrorBoundary(或从 ErrorBoundary 派生)是捕获由于 ISR 中的用户操作而引发的all未处理异常的唯一方法,请明确说明。

这是我的中间件处理程序。

public class ExceptionHandlingMiddleware
{
    private readonly RequestDelegate _next;
    private string _path;
    private readonly ILogger<ExceptionHandlingMiddleware> _logger;

    public ExceptionHandlingMiddleware(ILogger<ExceptionHandlingMiddleware> logger, RequestDelegate next, string path)
    {
        _next = next;
        _path = path;
        _logger = logger;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (System.Exception ex)
        {
            _logger.LogError(ex, "Failed to invoke {Message}", ex.Message);
            context.Response.Redirect(_path);
        }
    }
}
.net error-handling blazor blazor-server-side
1个回答
0
投票

在我看来,

ErrorBoundary
组件是捕获 Blazor 组件中未处理异常的推荐方法。正如您所注意到的,中间件代码不会捕获组件渲染期间引发的异常,因为这些异常发生在 HTTP 请求管道之外,而中间件旨在处理该管道。

ErrorBoundary
是为 Blazor 的组件模型设计的,允许您通过显示自定义错误 UI 而不是默认的黄色错误消息来处理错误。这将帮助您提供用户友好的应用程序,即使发生意外错误也是如此。通过使用
ErrorBoundary
,您可以自定义错误 UI 以匹配您的应用程序的设计,甚至可以在呈现错误消息之前记录错误或执行其他操作。

虽然还有其他方法,例如在

Program.cs
中进行全局异常处理或使用
CircuitHandler
,但这些对于在组件渲染期间捕获异常并不有效。更适合处理更广泛的应用级事件。

更多详细信息,您可以参考Blazor中的错误处理的官方文档。

© www.soinside.com 2019 - 2024. All rights reserved.