UseExceptionHandler未将未处理的异常路由到"错误"页



在我的.Net Blazor服务器应用程序中,我希望在出现未处理的异常时向用户显示一个错误页面。但我似乎无法显示此错误页面。为了让它显示出来,我添加了一个按钮,它只是抛出一个Exception(我也尝试过强制执行DivideByZeroException(,但UseExceptionHandler并没有选择它,我只是在调试输出中得到了一个未处理的异常(在不调试的情况下运行它只会冻结页面(。我的中间件配置层次结构似乎得到了验证。如果我只输入urllocalhost:[port]/Error,我就会进入错误页面。

我错过了什么?

启动.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseExceptionHandler("/Error");           
app.UseHsts();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}

错误.cshtml

@page 
@model Presentation.WebUI.Pages.ErrorModel
<!DOCTYPE html>
<html>
[...html...]
</html>

错误.cshtml.cs

using [...]
namespace Presentation.WebUI.Pages
{
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
[IgnoreAntiforgeryToken]
public class ErrorModel : PageModel
{
public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
private readonly ILogger<ErrorModel> _logger;
public ErrorModel(ILogger<ErrorModel> logger)
{
_logger = logger;
}
public void OnGet()
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
}
}
}

解决方案是用Blazor组件(.rarzor(替换Error.cshtml和Error.cshhtml.cs,并将以下组件结构添加到MainLayout.cs文件中:

<ErrorBoundary>
<ChildContent>                      
@Body                                
</ChildContent>
<ErrorContent Context="Exception">
<Presentation.WebUI.Pages.Error></Presentation.WebUI.Pages.Error>
</ErrorContent>
</ErrorBoundary>

相关内容

  • 没有找到相关文章

最新更新