Как использовать страницу исключений разработчика в ASP.NET Core MVC

автор vadim


Страница исключений разработчика в ASP.NET Core предоставляет подробную информацию об исключениях. Поскольку разработчикам нужна подробная информация об исключениях, а конечным пользователям — нет, шаблоны ASP.NET Core включают страницу исключений разработчика только тогда, когда приложение выполняется в среде разработки.

В этой статье рассказывается о промежуточном программном обеспечении страницы исключений разработчика в ASP.NET Core MVC и о том, как мы можем обрабатывать исключения как в средах разработки, так и в производственных средах в приложениях ASP.NET Core MVC.

Для работы с примерами кода, представленными в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2019. Если у вас еще нет копии, вы можете скачать Visual Studio 2019 здесь.

Создайте проект ASP.NET Core MVC в Visual Studio 2019.

Прежде всего давайте создадим проект ASP.NET Core в Visual Studio 2019. Выполнение этих шагов позволит создать новый проект ASP.NET Core MVC 5 в Visual Studio 2019.

  1. Запустите интегрированную среду разработки Visual Studio.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web App (Model-View-Controller)» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В следующем окне «Дополнительная информация» выберите .NET 5.0 в качестве целевой платформы из раскрывающегося списка вверху. В поле «Тип аутентификации» оставьте значение «Нет» (по умолчанию).
  9. Убедитесь, что флажки «Включить Docker», «Настроить для HTTPS» и «Включить компиляцию среды выполнения Razor» сняты, поскольку мы не будем здесь использовать ни одну из этих функций.
  10. Нажмите Создать.

Будет создан новый проект ASP.NET Core MVC. Мы будем использовать этот проект для работы с промежуточным программным обеспечением Developer Exception Page в последующих разделах этой статьи.

Затем выполните шаги, описанные ниже, чтобы создать дополнительные контроллеры в вашем проекте:

  1. Щелкните правой кнопкой мыши папку решения «Контроллеры».
  2. Выберите Добавить -> Контроллер.
  3. В диалоговом окне «Добавить новый шаблонный элемент» выберите API в качестве шаблона (по умолчанию будет выбран MVC).
  4. Выберите пункт «API-контроллер с действиями чтения/записи».
  5. Нажмите Добавить.
  6. В диалоговом окне «Добавить новый элемент», показанном ниже, укажите имя для вашего нового контроллера.
  7. Нажмите Добавить.

Обработка исключений в ASP.NET Core MVC

Рассмотрим следующий фрагмент кода, который генерирует исключение в методе Configuration класса запуска:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
      app.UseStaticFiles();
      app.UseRouting();
      app.UseAuthorization();
      app.UseEndpoints(endpoints = >{
            endpoints.MapControllerRoute(
            name: "default", pattern:
"{controller=Home}/{action=Index}/{id?}");
      });
      throw new Exception("An error occurred while processing the request");
}

При запуске вышеуказанного приложения будет выдано исключение с сообщениями об ошибках, показанными на рисунке 1 ниже.

страница исключений разработчика 01 ИДГ

Рисунок 1.

Как вы можете видеть на рисунке 1, отображаемые здесь сообщения об ошибках не являются ни подробными, ни удобными для разработчиков. Лучшим вариантом является использование страницы исключений разработчика.

Обработка исключений в среде разработки

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

Страница исключений разработчика группирует эту подробную информацию в пять разделов с вкладками — «Стек», «Запрос», «Файлы cookie», «Заголовки» и «Маршрутизация», как показано на рисунке 2 ниже.

страница исключений разработчика 02 ИДГ

Фигура 2.

Когда вы создаете новый проект ASP.NET Core MVC в Visual Studio, шаблон ASP.NET Core создает следующий код в методе Configuration класса Startup.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
      if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
      }
      else {
            app.UseExceptionHandler("/Home/Error");
      }
      app.UseStaticFiles();
      app.UseRouting();
      app.UseAuthorization();
      app.UseEndpoints(endpoints = >{
            endpoints.MapControllerRoute(
            name: "default", pattern:
"{controller=Home}/{action=Index}/{id?}");
      });
}

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

Обратите внимание, что метод расширения UseDeveloperExceptionPage вызывается в начале конвейера, до вызова любого другого промежуточного программного обеспечения. Это сделано для того, чтобы гарантировать перехват исключений в следующем промежуточном программном обеспечении.

Обработка исключений в производственной среде

Для обработки исключений в производственной среде вам следует воспользоваться методом расширения UseExceptionHandler. В следующем листинге кода показано, как можно вызвать метод расширения UseExceptionHandler в методе Configuration класса Startup.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
      if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
      }
      else {
            app.UseExceptionHandler("/Home/Error");
      }
      app.UseStaticFiles();
      app.UseRouting();
      app.UseAuthorization();
      app.UseEndpoints(endpoints = >{
            endpoints.MapControllerRoute(
            name: "default", pattern:
            "{controller=Home}/{action=Index}/{id?}");
      });
}

Метод расширения UseExceptionHandler можно использовать для настройки пользовательских маршрутов обработки ошибок. Обратитесь к следующему фрагменту кода.

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
      if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage(developerExceptionPageOptions);
      }
      else {
            app.UseExceptionHandler("/Home/Error");
      }
      //Other code removed for brevity
}

При возникновении ошибки в приложении ASP.NET Core MVC элемент управления будет перенаправлен в /home/error.

Обратите внимание, что вы можете использовать лямбда-выражение в методе расширения UseExceptionHandler вместо использования пользовательской страницы обработчика исключений. Следующий фрагмент кода иллюстрирует, как этого можно достичь.

app.UseExceptionHandler(errorApp = >{
      errorApp.Run(async context = >{
            context.Response.StatusCode = (int)
HttpStatusCode.InternalServerError;
            context.Response.ContentType = "text/html";
            await context.Response.WriteAsync("<html
lang=\"en\"><body>\r\n");
            await context.Response.WriteAsync("An error occurred...<br><br>\r\n");
            await context.Response.WriteAsync("</body></html>\r\n");
            await context.Response.WriteAsync(new string(' ', 512));
      });
});

Страница исключений разработчика доступна после добавления промежуточного программного обеспечения страницы исключений разработчика в конвейер обработки запросов ASP.NET Core MVC. Шаблон по умолчанию в ASP.NET Core MVC включает это промежуточное ПО только для среды разработки. В производстве вы можете воспользоваться методом расширения UseExceptionHandler для настройки пользовательской обработки ошибок.

Related Posts

Оставить комментарий