Веб-приложение весь блазор перестает работать, когда происходит исключение - PullRequest
0 голосов
/ 21 июня 2019

Пожалуйста, посоветуйте мне любое подходящее решение для следующей проблемы,

, когда приложение Blazor выдает какое-либо исключение, все приложение закрывается и никакая ссылка не работает, пока я не смогу снова запустить приложение через студию.

что делать с этой проблемой?

спасибо и наилучшими пожеланиями

Отредактировано

(для предоставления запрошенногоинформация)

Шаги для воспроизведения:

  1. Создание приложения blazorserverside:

  2. Изменить IncrementCount

В Counter.razor:

void IncrementCount()
{
    currentCount += 1;
    _ = 0 / (5-currentCount);  // <-- force error when currentCount is 5.
}

Нажмите кнопку Click Me 5 раз, чтобы вызвать ошибку.

Попытайтесь перейти к другим страницам приложения (Home, Fetch Data), ничего не происходит, потому что оно не работает автоматическиclient.

Дополнительная информация

Вкл. Startup.cs Сконфигурированы ошибки:

app.UseExceptionHandler("/errors");

Ошибки трассировки стека:

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)

1 Ответ

1 голос
/ 03 июля 2019

Intro

Я думаю, это очень интересный вопрос.Обычно мы хотим сопоставить новые концепции со всеми.Это происходит со мной с архитектурой Blazor, я хочу видеть это как mvc ++.Но это не так, страница .razor выглядит больше как форма WinForm (или WPF), чем запрос mvc.Когда у вас возникает ошибка времени выполнения на Winforms, происходит сбой всех приложений.

Ответ

Так же, как вы делаете на WinForms, вы должны обрабатывать ошибки одну за другой в своем коде Blazor.Как и в случае с настольными приложениями, используя try catch.

Что касается внутренних ошибок Blazor, таких как PreRendering, JS Interop и т. д., похоже, что команда Blazor все еще работает над этим, см. FollowВверх: улучшения обработки ошибок этапы.

Пример 1:

Для вашего кода:

void IncrementCount()
{
    currentCount += 1;
    _ = 0 / (5-currentCount);  // <-- force error when currentCount is 5.
}

Решение:

void IncrementCount()
{
    currentCount += 1;
    try
    {
        _ = 0 / (5-currentCount);
    }
    catch (DivideByZeroException e)
    {
        // handling exception
    }
}

Пример 2:

Для DivideByZeroException на странице .razor:

<h1> @( (0 / (5-currentCount) ).ToString()  ) </h1>

В настоящее время они не являются решением.

Отредактировано Работа Mister Magoo : Существует решение для Образца 2: try..catch - но это не очень практично, чтобы сделать это для всей вашей разметки

<h1>
    @try
    {
        @:@((0 / (5 - currentCount)).ToString())
    }
    catch (Exception ex)
    {
        @:@ex.Message;
    }
</h1>
...