Литмир - Электронная Библиотека
A
A

Модифицируйте метод

AddControllers()
, добавив специальный фильтр:

services

  .AddControllers(<b>config =&gt; config.Filters.Add(</b>

<b>      new CustomExceptionFilterAttribute(_env))</b>)

  .AddJsonOptions(options =&gt;

  {

    options.JsonSerializerOptions.PropertyNamingPolicy = null;

    options.JsonSerializerOptions.WriteIndented = true;

  })

  .ConfigureApiBehaviorOptions(options =&gt;

  {

  ...

  });

Тестирование фильтра исключений

Чтобы протестировать фильтр исключений, откройте файл

WeatherForecastController.cs
и обновите метод действия
Get()
показанным ниже кодом:

[HttpGet]

public IEnumerable&lt;WeatherForecast&gt; Get()

{

  _logger.LogAppWarning(&quot;This is a test&quot;);

<b>  throw new Exception(&quot;Test Exception&quot;);</b>

  ...

}

Запустите приложение и испытайте метод с использованием Swagger. Результаты, отображенные в пользовательском интерфейсе Swagger должны соответствовать следующему выводу (трассировка стека приведена с сокращениями):

{

  &quot;Error&quot;: &quot;General Error.&quot;,

  &quot;Message&quot;: &quot;Test Exception&quot;,

  &quot;StackTrace&quot;: &quot;   at AutoLot.Api.Controllers.WeatherForecastController.Get() in

D:\\Projects\\Books\\csharp9-wf\\Code\\New\\Chapter_30\\AutoLot.Api\\Controllers\\

WeatherForecastController.cs:line 31\r\n  &quot;

}

Добавление поддержки запросов между источниками

Приложения API должны иметь политики, которые разрешают или запрещают взаимодействовать с ними клиентам, обращающимся из другого сервера. Такие типы запросов называются запросами между источниками (cross-origin requests — CORS). Хотя в этом нет необходимости при работе локально на своей машине для всего мира ASP.NET Core, поддержка CORS нужна фреймворкам JavaScript, которые желают взаимодействовать с вашим приложением API, даже когда они все вместе функционируют локально.

На заметку! Дополнительные сведения о поддержке CORS ищите в документации по ссылке

https://docs.microsoft.com/ru-ru/aspnet/core/security/cors
.

Создание политики CORS

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

Конфигурирование начинается с создания политики CORS и добавления ее в коллекцию служб. Политика имеет имя (оно будет использоваться в методе

Configure()
), за которым следуют правила. Далее будет сознана политика по имени
AllowAll
, разрешающая все. Добавьте в метод
ConfigureServices()
класса
Startup
следующий код:

services.AddCors(options =&gt;

{

  options.AddPolicy(&quot;AllowAll&quot;, builder =&gt;

  {

   builder

      .AllowAnyHeader()

      .AllowAnyMethod()

      .AllowAnyOrigin();

  });

});

Добавление политики CORS в конвейер обработки HTTP

Наконец, политику CORS необходимо добавить в конвейер обработки HTTP. Поместите между вызовами

арр. UseRouting()
и
арр.UseEndpoints()
в методе
Configure()
класса
Startup
показанную ниже строку (выделенную полужирным):

public void Configure(

  IApplicationBuilder app,

  IWebHostEnvironment env,

  ApplicationDbContext context)

{

  ...

  // Включить маршрутизацию.

  app.UseRouting();

<b>  // Добавить политику CORS.</b>

<b>  app.UseCors(&quot;AllowAll&quot;);</b>

  // Включить проверки авторизации.

  app.UseAuthorization();

  ...

}

Резюме

В главе вы продолжили изучение ASP.NET Core. Сначала вы узнали о возвращении данных JSON из методов действий, после чего взглянули на атрибут

ApiController
и его влияние на контроллеры API. Затем вы обновили общую реализацию Swashbuckle, чтобы включить XML-документацию приложения и информацию из атрибутов методов действий.

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

В следующей главе вы завершите построение веб-приложения ASP.NET Core, т.е.

AutoLot.Mvc
.

Глава 31

Создание приложений MVC с помощью ASP.NET Core

В главе 29 была заложена основа ASP.NET Core, а в главе 30 вы построили службу REST. В этой главе вы будете создавать веб-приложение с использованием паттерна МУС. Все начинается с помещения "V" обратно в "МУС".

608
{"b":"847442","o":1}