обработка ошибок aspnet core 2.2 бритвенных страниц - PullRequest
0 голосов
/ 05 марта 2019

У меня есть очень простое исключение, которое обрабатывается страницей ошибок по умолчанию, сгенерированной VS2017 для бритвенных страниц .net core.Страница ошибки отображается с ошибкой исключения - есть ли способ показать пользовательскую ошибку, например «Ошибка в команде, попробуйте снова»

     try
      {

      var interenet = "nc -w 5 -z 8.8.8.8 53  >/dev/null 2>&1 && echo 'ok' || echo 'error'".Bash();

        }
        catch (Exception ex2)
           {
               _logger.LogError(
                            0, ex2,
                            "An exception was thrown attempting " +
                            "to execute the error handler.");

                    throw new Exception(ex2.Message);
   }

Модель страницы ошибки

public class ErrorModel : PageModel
    {
        public string RequestId { get; set; }

        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);

        public void OnGet()
        {
            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
        }
    }

Запусккласс, который я добавил

   app.UseExceptionHandler("/Error");

1 Ответ

1 голос
/ 06 марта 2019

ExceptionHandlerMiddleware предназначен для перехвата необработанных исключений.Вы обрабатываете свое исключение, но затем выбрасываете другое, создаете новое необработанное исключение и тем самым заставляете промежуточную программу отображать настроенную страницу ошибок.Я добавил бы свойство общедоступной строки на страницу, на которой произошла ошибка, и установил для нее любое сообщение об ошибке, которое вы хотите в блоке catch, обработав тем самым исключение и не вызывая пользовательскую страницу ошибки:

public class YourPageModel : PageModel
{
    public string ErrorMessage { get; set; }

    public void OnGet() // or OnPost, whichever
    {
        try
        {
            var internet = "nc -w 5 -z 8.8.8.8 53  >/dev/null 2>&1 && echo 'ok' || echo 'error'".Bash();
        }
        catch (Exception ex2)
        {
            _logger.LogError(0, ex2, "An exception was thrown attempting " +
                            "to execute the error handler.");
            ErrorMessage = "Error in command try again";
        }
    }
}

Добавьте <p>@Model.ErrorMessage</p> где-нибудь на странице содержимого, которая принадлежит PageModel, где возникает это исключение.

...