Как перенаправить на страницу пользовательского обработчика ошибок - PullRequest
0 голосов
/ 14 мая 2019

Я хочу общую страницу ошибок для всех ошибок приложения.

Я следовал рекомендациям по созданию собственного обработчика ошибок в ядре ASP.NET, и это ловит ошибки, как и ожидалось. Тем не менее, я не вижу, как перенаправить на общую ошибку обработки страницы. Примеры, казалось, были сосредоточены на веб-API, а не на пользовательском интерфейсе. У меня есть следующий пользовательский код обработки ошибок

  private static Task HandleExceptionAsync(HttpContext context, Exception exception)
    {
        context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

        int exceptionId = ExceptionManager.Publish(exception);

        return context.Response.WriteAsync(new ErrorViewModel()
        {
            ExceptionId = exceptionId
        }.ToString());
    }

Сведения об исключении регистрируются в базе данных и возвращают Id. У меня есть действие контроллера, которое отображает идентификатор, чтобы пользователи могли сообщить о нем.

Как мне перенаправить на мой обзор ошибок?

1 Ответ

0 голосов
/ 14 мая 2019

В методе Startup.cs вам нужно вызвать ExceptionHandlerMiddleware, как показано ниже.

app.UseMiddleware(typeof(ExceptionHandlerMiddleware));

создайте класс промежуточного программного обеспечения и напишите код ниже

public class ExceptionHandlerMiddleware 
    { 
        private readonly RequestDelegate next; 

        public ExceptionHandlerMiddleware(RequestDelegate next) 
        { 
            this.next = next; 
        } 

        public async Task Invoke(HttpContext context) 
        { 
            try 
            { 
               //Write you logic
            } 
            catch (Exception ex) 
            { 
                await HandleExceptionAsync(context, ex); 
            } 
        } 

        private static async Task HandleExceptionAsync(HttpContext context, Exception exception) 
        { 

            context.Response.StatusCode = 500; 
            if (IsRequestAPI(context)) 
            { 
                //when request api 
                context.Response.ContentType = "application/json"; 
                await context.Response.WriteAsync(JsonConvert.SerializeObject(new 
                { 
                    State = 500, 
                    message = exception.Message 
                })); 
            } 
            else 
            { 
                //when request page 
                context.Response.Redirect("/Home/Errorpage"); 
            } 
        } 
    } 

Промежуточное программное обеспечение «протекает через воду» до тех пор, пока либо все не будет выполнено, либо одно не остановит выполнение (в случае обработки наших исключений мы напишем наше, чтобы оно прекратило выполнение. Подробнее об этом позже).

Первым делом, передаваемым на ваше промежуточное программное обеспечение, является делегат запроса. Это делегат, который берет текущий объект HttpContext и выполняет его. Ваше промежуточное ПО сохраняет его при создании и использует его на шаге Invoke (). Invoke () - то, где работа сделана. Все, что вы хотите сделать с запросом / ответом как часть вашего промежуточного программного обеспечения, делается здесь. Некоторым другим использованием промежуточного программного обеспечения может быть авторизация запроса на основе заголовка или внедрение заголовка в запрос или ответ. Дополнительные примеры можно найти в документации Middleware.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...