发生异常时,整个blazor web应用程序停止工作

发生异常时,整个blazor web应用程序停止工作,blazor,blazor-server-side,Blazor,Blazor Server Side,请为我提供以下问题的合适解决方案 当blazor应用程序抛出任何异常时,整个应用程序都会关闭,并且没有链接在工作,直到我可以通过studio再次运行应用程序 如何处理这个问题 谢谢并致以最良好的问候 已编辑 (以提供所需信息) 复制步骤: 创建blazorserverside应用程序: 修改递增计数 在柜台上,剃须刀: void IncrementCount() { currentCount += 1; _ = 0 / (5-currentCount); // <-- f

请为我提供以下问题的合适解决方案

当blazor应用程序抛出任何异常时,整个应用程序都会关闭,并且没有链接在工作,直到我可以通过studio再次运行应用程序

如何处理这个问题

谢谢并致以最良好的问候

已编辑 (以提供所需信息)

复制步骤:

  • 创建blazorserverside应用程序:

  • 修改递增计数

  • 柜台上,剃须刀

    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>