发生异常时,整个blazor web应用程序停止工作
请为我提供以下问题的合适解决方案 当blazor应用程序抛出任何异常时,整个应用程序都会关闭,并且没有链接在工作,直到我可以通过studio再次运行应用程序 如何处理这个问题 谢谢并致以最良好的问候 已编辑 (以提供所需信息) 复制步骤:发生异常时,整个blazor web应用程序停止工作,blazor,blazor-server-side,Blazor,Blazor Server Side,请为我提供以下问题的合适解决方案 当blazor应用程序抛出任何异常时,整个应用程序都会关闭,并且没有链接在工作,直到我可以通过studio再次运行应用程序 如何处理这个问题 谢谢并致以最良好的问候 已编辑 (以提供所需信息) 复制步骤: 创建blazorserverside应用程序: 修改递增计数 在柜台上,剃须刀: void IncrementCount() { currentCount += 1; _ = 0 / (5-currentCount); // <-- f
柜台上,剃须刀:
void IncrementCount()
{
currentCount += 1;
_ = 0 / (5-currentCount); // <-- force error when currentCount is 5.
}
堆栈跟踪错误:
Unhandled exception rendering component: Attempted to divide by zero.
System.DivideByZeroException: Attempted to divide by zero.
at blaex.Pages.Counter.IncrementCount() in /home/dani/tmp/blaex/Pages/Counter.razor:line 27
at Microsoft.AspNetCore.Components.EventCallbackWorkItem.InvokeAsync[T](MulticastDelegate delegate, T arg)
at Microsoft.AspNetCore.Components.ComponentBase.Microsoft.AspNetCore.Components.IHandleEvent.HandleEventAsync(EventCallbackWorkItem callback, Object arg)
at Microsoft.AspNetCore.Components.Rendering.Renderer.DispatchEventAsync(Int32 eventHandlerId, UIEventArgs eventArgs)
编辑于2019年11月
引述:
当Blazor应用程序在开发过程中无法正常运行时,获取详细的错误信息非常重要,这样您就可以排除故障并修复问题。Blazor应用程序现在在出现错误时在屏幕底部显示一条金条
在生产中,金条会通知用户出现了问题,并建议用户刷新浏览器
此外,更多信息请访问
简介
我想这是一个非常有趣的问题。通常我们希望将新概念与所有概念相匹配。这在Blazor体系结构中发生,我想把它看作是一种mvc++。但事实并非如此,.razor
页面看起来更像是WinForm
(或WPF
表单),而不是mvc
请求。当您在Winforms
上出现运行时错误时,所有应用程序都会崩溃
答复
就像您在WinForms
上所做的那样,您应该像在桌面应用程序上一样,使用try-catch
逐个处理Blazor代码中的错误
对于Blazor内部的错误,如预渲染、JS互操作等,Blazor团队似乎仍在努力,请参见里程碑
样本1:
对于您的代码:
void IncrementCount()
{
currentCount += 1;
_ = 0 / (5-currentCount); // <-- force error when currentCount is 5.
}
样本2:
对于.razor
页面上的dividebyzeroception
:
<h1> @( (0 / (5-currentCount) ).ToString() ) </h1>
处理您的异常。总是个好主意。我不确定,但当前Blazor的行为可能是出于设计。请提供代码或一些堆栈跟踪/日志。异常发生在应用程序的哪个部分?我认为这是一个好问题。我附加了额外的信息,使它变得如此友好。对于示例2,有一个解决方案:try..catch-但对所有标记都这样做并不太实际-我们确实需要Blazor内部的一些东西来暴露更好的错误handling@MisterMagoo-是的,很高兴看到Blazor团队意识到这一需要,但是,如果他们不能在下一版本中发布任何东西,我不会感到惊讶。也许“社区”需要创建一个NuGet包来解决这个问题?
void IncrementCount()
{
currentCount += 1;
try
{
_ = 0 / (5-currentCount);
}
catch (DivideByZeroException e)
{
// handling exception
}
}
<h1> @( (0 / (5-currentCount) ).ToString() ) </h1>
<h1>
@try
{
@:@((0 / (5 - currentCount)).ToString())
}
catch (Exception ex)
{
@:@ex.Message;
}
</h1>