提问人:KDA 提问时间:10/17/2022 更新时间:10/20/2022 访问量:185
UseExceptionHandler 未将未经处理的异常路由到“错误”页
UseExceptionHandler not routing unhandled exceptions to Error page
问:
在我的 .Net Blazor 服务器应用程序中,我希望在出现未经处理的异常时向用户显示“错误”页。但我似乎无法显示此错误页面。为了尝试显示它,我添加了一个按钮,该按钮只是抛出一个(我也尝试过强制一个),但我没有选择它,我只是在我的调试输出中得到一个未经处理的异常(在没有调试的情况下运行它只会冻结页面)。我的中间件配置层次结构似乎检查出来了。如果我只是输入 url,我会进入错误页面。Exception
DivideByZeroException
UseExceptionHandler
localhost:[port]/Error
我错过了什么?
Startup.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>
Error.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;
}
}
}
答:
0赞
KDA
10/20/2022
#1
解决方案是将 Error.cshtml 和 Error.cshtml.cs 替换为 Blazor 组件 (.razor),并将以下组件结构添加到 MainLayout.cs 文件:
<ErrorBoundary>
<ChildContent>
@Body
</ChildContent>
<ErrorContent Context="Exception">
<Presentation.WebUI.Pages.Error></Presentation.WebUI.Pages.Error>
</ErrorContent>
</ErrorBoundary>
评论