Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Модифицируйте метод
AddControllers()services .AddControllers(<b>config => config.Filters.Add(</b><b> new CustomExceptionFilterAttribute(_env))</b>) .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; options.JsonSerializerOptions.WriteIndented = true; }) .ConfigureApiBehaviorOptions(options => { ... });Тестирование фильтра исключений
Чтобы протестировать фильтр исключений, откройте файл
WeatherForecastController.csGet()[HttpGet]public IEnumerable<WeatherForecast> Get(){ _logger.LogAppWarning("This is a test");<b> throw new Exception("Test Exception");</b> ...}Запустите приложение и испытайте метод с использованием Swagger. Результаты, отображенные в пользовательском интерфейсе Swagger должны соответствовать следующему выводу (трассировка стека приведена с сокращениями):
{ "Error": "General Error.", "Message": "Test Exception", "StackTrace": " at AutoLot.Api.Controllers.WeatherForecastController.Get() in D:\Projects\Books\csharp9-wf\Code\New\Chapter_30\AutoLot.Api\Controllers\WeatherForecastController.cs:line 31rn "}Добавление поддержки запросов между источниками
Приложения 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()AllowAllConfigureServices()Startupservices.AddCors(options =>{ options.AddPolicy("AllowAll", builder => { builder .AllowAnyHeader() .AllowAnyMethod() .AllowAnyOrigin(); });});Добавление политики CORS в конвейер обработки HTTP
Наконец, политику CORS необходимо добавить в конвейер обработки HTTP. Поместите между вызовами
арр. UseRouting()арр.UseEndpoints()Configure()Startuppublic void Configure( IApplicationBuilder app, IWebHostEnvironment env, ApplicationDbContext context){ ... // Включить маршрутизацию. app.UseRouting();<b> // Добавить политику CORS.</b><b> app.UseCors("AllowAll");</b> // Включить проверки авторизации. app.UseAuthorization(); ...}Резюме
В главе вы продолжили изучение ASP.NET Core. Сначала вы узнали о возвращении данных JSON из методов действий, после чего взглянули на атрибут
ApiControllerДалее был построен базовый контроллер, содержащий большинство функциональности приложения. После этого в проект были добавлены производные контроллеры, специфичные для сущностей. В заключение был добавлен фильтр исключений уровня приложения и поддержка запросов между источниками.
В следующей главе вы завершите построение веб-приложения ASP.NET Core, т.е.
AutoLot.MvcГлава 31
Создание приложений MVC с помощью ASP.NET Core
В главе 29 была заложена основа ASP.NET Core, а в главе 30 вы построили службу REST. В этой главе вы будете создавать веб-приложение с использованием паттерна МУС. Все начинается с помещения "V" обратно в "МУС".