我创建了一个服务器端blazor应用程序,每当出现错误时,我都会被迫重新加载页面。有没有什么好的方法可以将用户重定向到自定义的错误页面,而不是页面底部出现的黄色条?
在重新加载之前,您无法导航到其他页面,这对用户来说非常烦人。。。
我对您最好的回答是保护您的异常。当您遇到可能发生异常的地方时,制作一些try/catch块,并在前端处理它们,而不是让应用程序抛出异常。如果这样做,应用程序不会被迫停止,因此用户也不会被迫重新加载页面。
try {
// Some code to send data to a database via a service or controller
} catch (ArgumentException e) when (e.ParamName == "Stiffler's Mom")
{
// Some code to redirect the user/show validation errors, if something is wrong
}
使用ErrorBoundary,您可以为用户将在客户端上看到的错误信息创建自己的组件
剃刀页面的简单示例(*.rarzor(:
<ErrorBoundary @ref=errorBoundary>
<ChildContent>
@*---Here is your component or page---*@
</ChildContent>
<ErrorContent>
@*---Here is your own component for displaying error---*@
<ErrorContent>
</ErrorBoundary>
@code{
private ExErrorBoundary? errorBoundary;
protected override void OnParametersSet()
{
errorBoundary?.Recover();
}
}
Recover((是在后续导航过程中重置ErrorBoundary所必需的。
此处详细描述:https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/handle-errors?view=aspnetcore-7.0#错误边界
如果您想获得有关导致ErrorBoundary的异常的信息,那么您需要从ErrorBoundary继承该类,并获得CurrentException属性,如下所示:
public class ExErrorBoundary : ErrorBoundary
{
public new Exception? CurrentException => base.CurrentException;
}