Читаем Язык программирования C#9 и платформа .NET5 полностью

Итак, все контроллеры готовы и вы можете с помощью пользовательского интерфейса Swagger протестировать полную функциональность. Если вы собираетесь добавлять/обновлять/удалять записи, тогда измените значение RebuildDataBase на true в файле appsettings.development.json:

{

  ...

  "RebuildDataBase": true,

  ...

}

<p id="AutBody_Root1429"><strong>Фильтры исключений</strong></p>

Когда в приложении Web API возникает исключение, никакая страница со сведениями об ошибке не отображается, т.к. пользователем обычно является другое приложение, а не человек. Информация об ошибке должна быть отправлена в формате JSON наряду с кодом состояния HTTP. Как обсуждалось в главе 29, инфраструктура ASP.NET Core позволяет создавать фильтры, которые запускаются при появлении необработанных исключений. Фильтры можно применять глобально, на уровне контроллера или на уровне действия. Для текущего приложения вы построите фильтр исключений для отправки данных JSON (вместе с кодом HTTP 500) и включения трассировки стека, если сайт функционирует в режиме отладки.

На заметку! Фильтры — крайне мощное средство ASP.NET Core. В этой главе вы ознакомитесь только с фильтрами исключений, но с их помощью можно создавать очень многое, что значительно экономит время при построении приложений ASP.NET Core. Полную информацию о фильтрах ищите в документации по ссылке https://docs.microsoft.com/ru-ru/aspnet/core/mvc/controllers/filters.

<p id="AutBody_Root1430"><strong>Создание специального фильтра исключений</strong></p>

Создайте новый каталог под названием Filters и добавьте в него новый файл класса по имени CustomExceptionFilterAttribute.cs. Приведите операторы using к следующему виду:

using Microsoft.AspNetCore.Hosting;

using Microsoft.AspNetCore.Mvc;

using Microsoft.AspNetCore.Mvc.Filters;

using Microsoft.EntityFrameworkCore;

using Microsoft.Extensions.Hosting;

Сделайте класс открытым и унаследованным от ЕхсерtionFiIterAttribute. Переопределите метод OnException(), как показано ниже:

namespace AutoLot.Api.Filters

{

  public class CustomExceptionFilterAttribute : ExceptionFilterAttribute

  {

    public override void OnException(ExceptionContext context)

    {

    }

  }

}

В отличие от большинства фильтров в ASP.NET Core, которые имеют обработчик событий "перед" и "после", фильтры исключений располагают только одним обработчиком: OnException() (или OnExceptionAsync()). Обработчик принимает один параметр, ExceptionContext, который предоставляет доступ к ActionContext, а также к сгенерированному исключению.

Кроме того, фильтры принимают участие во внедрении зависимостей, позволяя получить доступ в коде к любому элементу внутри контейнера. В рассматриваемом примере вам необходим экземпляр реализации IWebHostEnvironment, внедренный в фильтр, который будет использоваться для выяснения среды времени выполнения. Если средой является Development, тогда ответ должен также включать трассировку стека. Добавьте переменную уровня класса для хранения экземпляра реализации IWebHostEnvironment и конструктор:

private readonly IWebHostEnvironment _hostEnvironment;

public CustomExceptionFilterAttribute(IWebHostEnvironment hostEnvironment)

{

  _hostEnvironment = hostEnvironment;

}

Код в обработчике OnException() проверяет тип сгенерированного исключения и строит соответствующий ответ. В случае среды Development в сообщение ответа включается трассировка стека. Затем создается динамический объект, который содержит значения для отправки вызывающему запросу, и возвращается в IActionResult. Вот модифицированный код метода:

public override void OnException(ExceptionContext context)

{

  var ex = context.Exception;

   string stackTrace = _hostEnvironment.IsDevelopment()

     ? context.Exception.StackTrace : string.Empty;

  string message = ex.Message;

  string error;

    IActionResult actionResult;

  switch (ex)

  {

    case DbUpdateConcurrencyException ce:

      // Возвращается код HTTP 400.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных