ASP.Net Core в действии. 3 изд

ASP.Net Core в действии. 3 изд

ASP.Net Core в действии. 3 изд
Автор: Лок Эндрю
Переводчик: Д. А. Беликова
Дата выхода: 2024
Издательство: ДМК Пресс
Количество страниц: 1048
Размер файла: 12.3 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Вступительное слово от сообщества DotNet.Ru....23

Предисловие....25

Благодарности....27

Об этой книге ....29

Предисловие от издательства....22

Об авторе....34

Об иллюстрации на обложке....34

Начало работы с минимальными API....46

Начало работы с ASP.NET Core ....35

1.1 Что такое ASP.NET Core?....35

1.2 Какие типы приложений можно создавать?....36

1.3 Выбор ASP.NET Core ....37

1.4 Как работает ASP.NET Core? ....39

1.4.1 Как работает веб-запрос по протоколу HTTP? ....39

1.4.2 Как ASP.NET Core обрабатывает запрос? ....42

1.5 Что вы узнаете из этой книги ....43

Резюме....44

Часть I....46

Что такое ASP.NET Core....48

2.1 Использование фреймворка для создания веб-приложений....48

2.2 Для чего был создан ASP.NET Core....49

2.3 Парадигмы ASP.NET Core ....54

2.4 Когда следует выбрать ASP.NET Core....57

2.4.1 Если вы новичок в разработке .NET....58

2.4.2 Если вы .NET-разработчик, создающий новое приложение....60

2.4.3 Перенос существующего ASP.NET-приложения на ASP.NET Core....65

Резюме....67

Наше первое приложение....68

3.1 Краткий обзор приложения ASP.NET Core....69

3.2 Создаем наше первое приложение ASP.NET Core....71

3.2.1 Использование шаблона ....73

3.2.2 Сборка приложения....76

3.3 Запуск веб-приложения....77

3.4 Разбираемся с шаблоном проекта ....78

3.5 Файл проекта .csproj: объявление зависимостей....80

3.6 Файл Program.cs: определение приложения....82

3.7 Добавляем функциональность в приложение....85

3.7.1 Добавление и настройка сервисов ....88

3.7.2 Определение способа обработки запросов с помощью промежуточного ПО и конечных точек....90

Резюме....93

4....95

Обработка ошибок с помощью конвейера промежуточного ПО....95

4.1 Что такое промежуточное ПО....97

4.2 Объединение компонентов в конвейер....101

4.2.1 Простой сценарий конвейера 1: страница приветствия....102

4.2.2 Простой сценарий конвейера 2: обработка статических файлов ....105

4.2.3 Простой сценарий конвейера 3: приложение с минимальным API....109

4.3 Обработка ошибок с помощью промежуточного ПО....116

4.3.1 Просмотр исключений в окружении разработки: DeveloperExceptionPage....118

4.3.2 Обработка исключений в промышленном окружении: ExceptionHandlerMiddleware....120

Резюме....125

5....127

Создание JSON API с помощью минимальных API....127

5.1 Что такое HTTP API и когда его следует использовать?....128

5.2 Определение конечных точек минимальных API....132

5.2.1 Извлечение значений из URL-адреса с помощью маршрутизации....133

5.2.2 Сопоставление HTTP-методов с конечными точками....134

5.2.3 Определение обработчиков маршрутов с помощью функций....136

5.3 Генерация ответов с помощью IResult....139

5.3.1 Возврат кодов состояния с помощью Results и TypedResults....140

5.3.2 Возврат полезных данных об ошибках с помощью Problem Details....142

5.3.3 Преобразование всех ответов в Problem Details....144

Преобразование исключений в Problem Details....145

ПРЕОБРАЗОВАНИЕ КОДОВ СОСТОЯНИЯ ОШИБОК В ФОРМАТ PROBLEM DETAILS....147

5.4 Запуск общего кода с фильтрами конечных точек....149

5.4.1 Добавление нескольких фильтров к конечной точке....152

5.4.2 Фильтры или промежуточное ПО: что выбрать?....154

5.4.3 Обобщенные фильтры конечных точек....155

5.4.4 Реализация интерфейса IEndpointFilter....158

5.5 Организация API с помощью групп маршрутов....159

Резюме....162

6....164

Сопоставление URL-адресов с конечными точками с помощью маршрутизации....164

6.1 Что такое маршрутизация?....165

6.2 Маршрутизация конечных точек в ASP.NET Core....169

6.3 Изучение синтаксиса шаблона маршрута....173

6.3.1 Работа с параметрами и литеральными сегментами....173

6.3.2 Использование необязательных значений и значений по умолчанию....175

6.3.3 Добавление дополнительных ограничений к параметрам маршрута....176

6.3.4 Сопоставление произвольных URL-адресов с помощью универсального параметра....179

6.4 Генерация URL-адресов из параметров маршрута....180

6.4.1 Генерация URL-адресов для конечной точки минимального API с помощью класса LinkGenerator....181

6.4.2 Генерация URL-адресов с помощью IResults....183

6.4.3 Управление созданными URL-адресами с помощью RouteOptions....184

Резюме....186

7....188

Привязка модели и валидация в минимальных API....188

7.1 Извлечение значений из запроса с привязкой модели....189

7.2 Привязка простых типов к запросу....191

7.3 Привязка сложных типов к телу запроса в формате JSON....196

7.4 Массивы: простые типы или сложные?....198

7.5 Делаем параметры необязательными с помощью типов, допускающих значение NULL....201

7.6 Привязка сервисов и специальных типов....204

7.6.1 Внедрение хорошо известных типов....204

7.6.2 Внедрение сервисов....205

7.6.3 Привязка загрузки файлов с помощью IFormFile и IFormFileCollection....206

7.7 Собственная привязка с помощью BindAsync....208

7.8 Выбор источника привязки....209

7.9 Упрощение обработчиков с помощью AsParameters....210

7.10 Обработка пользовательского ввода с помощью валидации модели....212

7.10.1 Необходимость валидации модели....212

7.10.2 Использование атрибутов DataAnnotations для валидации....213

7.10.3 Добавление фильтра валидации в минимальные API....216

Резюме....219

Часть II....222

Создание полноценных приложений....222

8....224

Введение во внедрение зависимостей....224

8.1 Преимущества внедрения зависимостей....225

8.2 Создание слабосвязанного кода....232

8.3 Использование внедрения зависимостей в ASP.NET Core ....234

8.4 Добавление сервисов ASP.NET Core в контейнер....236

8.5 Использование сервисов из контейнера внедрения зависимостей....239

Резюме....241

9....243

Регистрация сервисов с помощью внедрения зависимостей....243

9.1 Регистрация собственных сервисов в контейнере внедрения зависимостей....244

9.2 Регистрация сервисов с использованием объектов и лямбда-функций....248

9.3 Многократная регистрация сервиса в контейнере....252

9.3.1 Внедрение нескольких реализаций интерфейса ....253

9.3.2 Внедрение одной реализации при регистрации нескольких сервисов ....255

9.3.3 Условная регистрация сервисов с помощью TryAdd....255

9.4 Жизненный цикл: когда создаются сервисы?....256

9.4.1 Transient: уникален каждый ....259

9.4.2 Scoped: держимся вместе....260

9.4.3 Singleton: может быть только один ....261

9.4.4 Следите за захваченными зависимостями ....263

9.5 Разрешение сервисов с жизненным циклом scoped за пределами запроса....266

Резюме....268

10....270

Конфигурирование приложения ASP. Net Core ....270

10.1 Представляем модель конфигурации ASP.NET Core....271

10.2 Создание объекта конфигурации для приложения....273

10.2.1 Добавление поставщика конфигурации в файле Program.cs ....276

10.2.2 Использование нескольких поставщиков для переопределения значений конфигурации....279

10.2.3 Безопасное хранение секретов конфигурации....281

Сохранение секретов в переменных окружения в промышленном окружении ....282

ХРАНЕНИЕ СЕКРЕТОВ С ПОМОЩЬЮ МЕНЕДЖЕРА USER SECRETS В ОКРУЖЕНИИ РАЗРАБОТКИ....283

10.2.4 Перезагрузка значений конфигурации при их изменении....285

10.3 Использование строго типизированных настроек с паттерном «Параметры»....287

10.3.1 Знакомство с интерфейсом IOptions....289

10.3.2 Перезагрузка строго типизированных параметров с помощью IOptionsSnapshot....290

10.3.3 Разработка классов параметров для автоматической привязки....292

10.3.4 Привязка строго типизированных параметров без интерфейса IOptions....294

10.4 Настройка приложения для нескольких окружений....296

10.4.1 Определение окружения размещения....297

10.4.2 Загрузка файлов конфигурации для конкретного окружения....298

10.4.3 Задаем окружение размещения....300

Резюме....304

11....307

Документирование API с помощью OpenAPI....307

11.1 Добавление описания OpenAPI в приложение....308

11.2 Тестирование API с помощью Swagger UI....311

11.3 Добавление метаданных в минимальные API....313

11.4 Создание строго типизированных клиентов с помощью NSwag ....316

11.4.1 Генерация клиента с помощью Visual Studio....317

11.4.2 Создание клиента с помощью инструмента .NET Global....321

11.4.3 Использование сгенерированного клиента для вызова API ....323

11.4.4 Настройка сгенерированного кода....324

11.4.5 Обновление описания OpenAPI ....327

11.5 Добавление описаний и сводок в конечные точки ....328

11.5.1 Использование текучих методов для добавления описаний....329

11.5.2 Использование атрибутов для добавления метаданных....331

11.6 Ограничения OpenAPI....335

11.6.1 Не все API можно описать, используя OpenAPI....335

11.6.2 Сгенерированный код чрезмерно категоричен....336

11.6.3 Инструменты часто отстают от спецификации....337

Резюме....338

12....341

Сохранение данных с Entity Framework Core....341

12.1 Знакомство с Entity Framework Core....343

12.1.1 Что такое EF Core?....343

12.1.2 Зачем использовать инструмент объектно-реляционного отображения?....345

12.1.3 Когда следует выбирать EF Core? ....346

12.1.4 Отображение базы данных в код приложения ....347

12.2 Добавляем EF Core в приложение....349

12.2.1 Выбор провайдера базы данных и установка EF Core....351

12.2.2 Создание модели данных ....352

12.2.3 Регистрация контекста данных ....355

12.3 Управление изменениями с помощью миграций....356

12.3.1 Создаем первую миграцию ....357

12.3.2 Добавляем вторую миграцию ....360

12.4 Выполнение запроса к базе данных и сохранение в ней данных ....363

12.4.1 Создание записи ....364

12.4.2 Загрузка списка записей....366

12.4.3 Загрузка отдельной записи ....368

12.4.4 Обновление модели с изменениями....370

12.5 Использование EF Core в промышленных приложениях....374

Резюме ....376

Часть III....378

Генерация HTML-кода с помощью Razor Pages и MVC....378

13....380

Создание сайта с помощью Razor Pages....380

13.1 Наше первое приложение Razor Pages....381

13.1.1 Использование шаблона «Веб-приложение»....381

13.1.2 Добавление и настройка сервисов....385

13.1.3 Создание HTML с помощью Razor Pages....387

13.1.4 Логика обработки запросов с помощью моделей страницы и обработчиков....389

13.2 Изучение типичной страницы Razor....391

13.3 Паттерн проектирования MVC....394

13.4 Применение паттерна проектирования MVC к Razor Pages....396

13.4.1 Направление запроса на страницу Razor и создание модели привязки....398

13.4.2 Выполнение обработчика с использованием модели приложения....400

13.4.3 Генерация HTML-кода с использованием модели представления....401

13.4.4 Собираем все вместе: полный запрос страницы Razor....402

Резюме....404

14....406

Сопоставление URL-адресов с Razor Pages с использованием маршрутизации....406

14.1 Маршрутизация в ASP.NET Core....407

14.2 Маршрутизация на основе соглашений и явная маршрутизация....408

14.3 Маршрутизация запросов в Razor Pages....411

14.4 Настройка шаблонов маршрутов страницы Razor....413

14.4.1 Добавление сегмента в шаблон маршрута....414

14.4.2 Полная замена шаблона маршрута....415

14.5 Генерация URL-адресов для страниц Razor....416

14.5.1 Генерация URL-адресов для страницы Razor....416

14.5.2 Генерация URL-адресов для контроллера MVC....417

14.5.3 Генерация URL-адресов с помощью класса LinkGenerator....419

14.6 Настройка соглашений с помощью Razor Pages....420

Резюме....426

15....428

Создание ответов с помощью обработчиков страниц в Razor Pages....428

15.1 Razor Pages и обработчики страниц....429

15.2 Выбор обработчика страницы для вызова....430

15.3 Прием параметров в обработчиках страниц....433

15.4 Возврат ответов IActionResult....435

15.4.1 PageResult и RedirectToPageResult....437

15.4.2 NotFoundResult и StatusCodeResult....437

15.5 Обработка кодов состояния с помощью StatusCodePagesMiddleware....439

Резюме....444

16....446

Привязка и валидация запросов с помощью Razor Pages....446

16.1 Модели в Razor Pages и MVC....447

16.2 От запроса к модели: делаем запрос полезным....450

16.2.1 Связывание простых типов ....455

16.2.2 Связывание сложных типов....458

Упрощение параметров метода привязкой к сложным объектам....459

Привязка коллекций и словарей....460

Привязка загрузки файлов с помощью IFormFile ....462

16.2.3 Выбор источника привязки ....462

16.3 Валидация моделей привязки....465

16.3.1 Валидация в Razor Pages....465

16.3.2 Валидация на сервере в целях безопасности....467

16.3.3 Валидация на стороне клиента для улучшения пользовательского опыта....471

16.4 Организация моделей привязки в Razor Pages....472

Резюме....475

17....477

Отрисовка HTML-кода с использованием представлений Razor....477

17.1 Представления: отрисовка пользовательского интерфейса....479

17.2 Создание представлений Razor....483

17.2.1 Представления Razor и сопутствующий код ....483

17.2.2 Знакомство с шаблонами Razor....484

17.2.3 Передача данных в представления....486

17.3 Создание динамических веб-страниц с помощью Razor....489

17.3.1 Использование кода C# в шаблонах Razor....490

17.3.2 Добавление циклов и условий в шаблоны Razor....491

17.3.3 Отрисовка HTML-кода с помощью метода Raw....494

17.4 Макеты, частичные представления и _ViewStart....496

17.4.1 Использование макетов для общей разметки ....497

17.4.2 Переопределение родительских макетов с помощью секций....500

17.4.3 Использование частичных представлений для инкапсуляции разметки....502

17.4.4  Выполнение кода в каждом представлении с помощью _ViewStart и _ViewImports....505

Импорт общих директив с помощью _ViewImports....505

Выполнение кода для каждого представления с помощью _ViewStart ....506

Резюме....507

18....509

Создание форм с помощью тег-хелперов....509

18.1 Редакторы кода и тег-хелперы....511

18.2 Создание форм с помощью тег-хелперов ....514

18.2.1 Тег-хелпер формы ....519

18.2.2 Тег-хелпер метки....520

18.2.3 Тег-хелперы текстового ввода....522

18.2.4 Тег-хелпер раскрывающегося списка....526

18.2.5 Тег-хелперы сообщений валидации и сводок валидации....532

18.3 Создание ссылок с помощью тег-хелпера привязки ссылки ....535

18.4 Сброс кеша с помощью тег-хелпера добавления версии ....536

18.5 Использование условной разметки с помощью тег-хелпера окружения....538

Резюме....539

19....542

Создание сайта с использованием контроллеров MVC....542

19.1 Razor Pages и MVC в ASP.NET Core....543

19.2 Наше первое веб-приложение MVC ....544

19.3 Сравнение контроллера MVC с PageModel из Razor Page....548

19.4 Выбор представления из контроллера MVC....550

19.5 Выбор между Razor Pages и контроллерами MVC....557

19.5.1 Преимущества Razor Page....557

19.5.2 Когда выбирать контроллеры MVC вместо Razor Pages....560

Резюме....562

20....563

Создание HTTP API с использованием контроллеров веб-API....563

20.1 Создание первого проекта веб-API....564

20.2 Применение паттерна проектирования MVC к веб-API....571

20.3 Маршрутизация на основе атрибутов: связывание методов действий с URL-адресами....575

20.3.1 Сочетание атрибутов маршрута для следования принципу DRY....577

20.3.2 Использование замены маркера для уменьшения дублирования при маршрутизации на основе атрибутов....579

20.3.3 Обработка HTTP-методов с помощью маршрутизации на основе атрибутов....580

20.4 Использование общепринятых соглашений с атрибутом [ApiController]....581

20.5 Генерация ответа от модели....584

20.5.1 Настройка форматеров по умолчанию: добавляем поддержку XML....587

20.5.2 Выбор формата ответа с помощью согласования типа содержимого....588

20.6 Контроллеры веб-API и минимальные API: что выбрать?....590

Резюме....593

21....596

Конвейер фильтров MVC и Razor Pages....596

21.1 Что такое конвейер фильтров MVC....597

21.2 Конвейер фильтров Razor Pages....600

21.3 Фильтры или промежуточное ПО: что выбрать?....602

21.4 Создание простого фильтра....603

21.5 Добавляем фильтры к действиям и страницам Razor Pages....606

21.6 Порядок выполнения фильтров....609

21.6.1 Порядок выполнения фильтров по умолчанию....609

21.6.2 Переопределение порядка выполнения фильтров по умолчанию с помощью интерфейса IOrderedFilter....610

Резюме....611

22....613

Создание собственных фильтров MVC и страниц Razor ....613

22.1 Создание собственных фильтров для приложения....614

22.1.1 Фильтры авторизации: защита API....617

22.1.2 Фильтры ресурсов: прерывание выполнения методов действий....618

22.1.3 Фильтры действий: настройка привязки модели и результатов действий....620

22.1.4 Фильтры исключений: собственная обработка исключений для методов действий....626

22.1.5 Фильтры результатов: настройка результатов действий перед их выполнением....628

22.1.6 Фильтры страниц: настройка привязки модели для Razor Pages....630

22.2 Прерывание выполнения конвейера....632

22.3 Использование внедрения зависимостей с атрибутами фильтра....635

Резюме....638

Часть IV....640

Защита и развертывание приложений....640

23....642

Аутентификация: добавление пользователей в приложение с помощью ASP.NET Core Identity....642

23.1 Знакомство с аутентификацией и авторизацией....644

23.1.1 Пользователи и утверждения в ASP.NET Core....644

23.1.2 Аутентификация в ASP.NET Core: сервисы и промежуточное ПО....645

Вход в приложение ASP.NET Core....646

Аутентификация пользователей для последующих запросов....647

23.2 Что такое ASP.NET Core Identity?....650

23.3 Создание проекта, в котором используется ASP.NET Core Identity....653

23.3.1 Создание проекта из шаблона....653

23.3.2 Изучение шаблона в Обозревателе решений ....655

23.3.3 Модель данных ASP.NET Core Identity....659

23.3.4 Взаимодействие с ASP.NET Core Identity ....661

23.4 Добавляем ASP.NET Core Identity в существующий проект....664

23.4.1 Настройка сервисов ASP.NET Core Identity и промежуточного ПО....665

23.4.2 Обновление модели данных EF Core для поддержки Identity....666

23.4.3 Обновление представлений Razor для связи с пользовательским интерфейсом Identity ....667

23.5 Настройка страницы по умолчанию в пользовательском интерфейсе ASP.NET Core Identity....669

23.6 Управление пользователями: добавление специальных данных для пользователей ....673

Резюме....675

24....678

Авторизация: обеспечиваем защиту приложения ....678

24.1 Знакомство с авторизацией....680

24.2 Авторизация в ASP.NET Core ....683

24.2.1 Предотвращение доступа анонимных пользователей к приложению....684

24.2.2 Обработка запросов, не прошедших аутентификацию....686

24.3 Использование политик для авторизации на основе утверждений....690

24.4 Создание пользовательских политик авторизации....693

24.4.1 Требования и обработчики: строительные блоки политики....694

24.4.2 Создание политики со специальным требованием и обработчиком....695

Создание IAuthorizationRequirement для представления требования ....695

Создание политики с несколькими требованиями....696

Создаем обработчики авторизации, чтобы отвечать требованиям....697

24.5 Управление доступом с авторизацией на основе ресурсов....701

24.5.1 Ручная авторизация запросов с помощью IAuthorizationService....703

24.5.2 Создание обработчика AuthorizationHandler на основе ресурсов....706

24.6 Скрытие HTML-элементов от неавторизованных пользователей....709

Резюме....712

25....714

Аутентификация и авторизация для API ....714

25.1 Аутентификация для API и распределенных приложений ....715

25.1.1 Распространение аутентификации на несколько приложений....715

25.1.2 Централизация аутентификации в поставщике идентификационной информации ....717

25.1.3 OpenID Connect и OAuth 2.0....720

25.2 Аутентификация с токеном на предъявителя....723

25.3 Добавление аутентификации на основе JWT-токенов на предъявителя в минимальные API ....730

25.4 Использование инструмента user-jwts для локального тестирования JWT-токенов....732

25.4.1 Создание JWT-токенов с помощью инструмента user-jwts....733

25.4.2 Настройка JWT-токенов....735

25.4.3 Управление локальными JWT....736

25.5 Описание требований к аутентификации для OpenAPI ....737

25.6 Применение политик авторизации к конечным точкам минимальных API ....741

Резюме....745

26....748

Мониторинг и устранение ошибок с помощью журналирования ....748

26.1 Эффективное использование журналирования в промышленном приложении....750

26.1.1 Выявление проблем с помощью специальных сообщений журнала....751

26.1.2 Абстракции журналирования ASP.NET Core ....753

26.2 Добавление сообщений журнала в ваше приложение....754

26.2.1 Уровень сообщения журнала: насколько важно сообщение журнала?....758

26.2.3 Форматирование сообщений и сбор значений параметров....761

26.2.2 Категория журнала: какой компонент создал журнал?....760

26.3 Контроль места записи журналов с помощью поставщиков журналирования....763

26.4 Изменение избыточности сообщений журналов с помощью фильтрации....767

26.5 Структурное журналирование: создание полезных сообщений журналов с возможностью поиска ....772

26.5.1 Добавление поставщика структурного журналирования в приложение ....774

26.5.2 Использование областей журналирования для добавления дополнительных свойств в сообщения журнала....777

Резюме....779

27....781

Публикация и развертывание приложения ....781

27.1 Что такое модель хостинга ASP.NET Core....782

27.1.1 Запуск и публикация приложения ASP.NET Core....785

27.1.2 Выбор метода развертывания для приложения....789

27.2 Публикация приложения в IIS....791

27.2.1 Конфигурирование IIS для ASP.NET Core....791

27.2.2 Подготовка и публикация приложения в IIS....793

27.3 Размещение приложения в Linux....796

27.3.1 Запуск приложения ASP.NET Core за обратным прокси-сервером в Linux ....796

27.3.2 Подготовка приложения к развертыванию в Linux....799

27.4 Настройка URL-адресов приложения ....801

Резюме....805

28....806

Добавляем протокол HTTPS в приложение....806

28.1 Для чего нужен протокол HTTPS?....807

28.2 Использование HTTPS-сертификатов для разработки....811

28.3 Настройка Kestrel для использования сертификата HTTPS в промышленном окружении ....814

28.4 Делаем так, чтобы протокол HTTPS использовался для всего приложения....816

28.4.1 Принудительное использование протокола HTTPS с помощью заголовков HTTP Strict Transport Security....817

28.4.2 Переадресация с HTTP на HTTPS с помощью компонента HttpsRedirectionMiddleware....821

28.4.3 Отклонение HTTP-запросов в приложениях API....824

Резюме....825

29....827

Повышаем безопасность приложения ....827

29.1 Защита от межсайтового скриптинга....828

29.2 Защита от межсайтовой подделки запросов (CSRF) ....832

29.3 Вызов веб-API из других доменов с помощью CORS....838

29.3.1 Что такое CORS и как он работает ....839

29.3.2 Добавление глобальной политики CORS ко всему приложению....841

29.3.3 Добавление CORS к определенным конечным точкам с помощью метаданных EnableCors....843

29.3.4 Настройка политик CORS....845

29.4 Изучение других векторов атак....847

29.4.1 Обнаружение и предотвращение атак с открытым перенаправлением ....847

29.4.2 Предотвращение атак с использованием внедрения SQL-кода с помощью EF Core и параметризации ....849

29.4.3 Предотвращение небезопасных прямых ссылок на объекты....851

29.4.4 Защита паролей и данных пользователей....852

Резюме....854

Часть V....856

Дальнейшая работа с ASP.NET Core....856

30....858

Создание приложений ASP.NET Core с помощью обобщенного хоста и класса Startup....858

30.1 Разделение ответственностей между двумя файлами....859

30.2 Класс Program: сборка веб-хоста....860

30.3 Класс Startup: настройка приложения....862

30.4 Создание собственного экземпляра IHostBuilder....867

30.5 Сложность обобщенного хоста ....870

30.6 Выбор между обобщенным хостом и минимальным хостингом....873

Резюме ....875

31....878

Расширенная настройка ASP.NET Core....878

31.1 Настройка конвейера промежуточного ПО....879

31.1.1 Создание простых приложений с помощью метода расширения Run ....880

31.1.2 Ветвление конвейера с помощью метода расширения Map....882

31.1.3 Добавление в конвейер с помощью метода расширения Use....886

31.1.4 Создание пользовательского компонента промежуточного программного обеспечения....889

31.1.5 Преобразование промежуточного ПО в конечные точки....893

31.2 Использование внедрения зависимостей с OptionsBuilder и IConfigureOptions ....897

31.3 Использование стороннего контейнера внедрения зависимостей....903

Резюме....906

32....908

Создание собственных компонентов MVC и Razor Pages....908

32.1 Создание собственного тег-хелпера Razor....909

32.1.1 Вывод информации об окружении с помощью собственного тег-хелпера....910

32.1.2 Создание специального тег-хелпера для условного скрытия элементов....914

32.1.3 Создание тег-хелпера для преобразования Markdown в HTML....916

32.2 Компоненты представления: добавление логики в частичные представления....918

32.3 Создание собственного атрибута валидации....924

32.4 Замена фреймворка валидации на FluentValidation....929

32.4.1 Сравнение FluentValidation и атрибутов DataAnnotations....930

32.4.2 Добавляем FluentValidation в приложение....934

Резюме....935

33....938

Вызов удаленных API с помощью IHttpClientFactory....938

33.1 Вызов API по протоколу HTTP: проблема с классом HttpClient ....939

33.2 Создание экземпляров класса HttpClient с помощью интерфейса IHttpClientFactory....945

33.2.1 Использование IHttpClientFactory для управления жизненным циклом HttpClientHandler....945

33.2.2 Настройка именованных клиентов во время регистрации....949

33.2.3 Использование типизированных клиентов для инкапсуляции HTTP-вызовов....950

33.3 Обработка временных ошибок HTTP с помощью библиотеки Polly....953

33.4 Создание специального обработчика HttpMessageHandler....956

Резюме....959

34....961

Создание фоновых задач и сервисов....961

34.1 Запуск фоновых задач с помощью IHostedService....962

34.1.1 Запуск фоновых задач по таймеру ....963

34.1.2 Использование сервисов с жизненным циклом Scoped в фоновых задачах ....968

34.2 Создание сервисов рабочей роли без пользовательского интерфейса с использованием IHost....970

34.2.1 Создание сервиса рабочей роли из шаблона....972

34.2.2 Запуск сервисов рабочей роли в промышленном окружении....975

34.3 Координация фоновых задач с помощью Quartz.NET....978

34.3.1 Установка Quartz.NET в приложение ASP.NET Core....979

34.3.2 Настройка задания для запуска по расписанию с помощью Quartz.NET....981

34.3.3 Использование кластеризации для повышения избыточности фоновых задач....984

Резюме....988

35....990

Тестирование приложений с помощью xUnit....990

35.1 Тестирование в ASP.NET Core....991

35.2 Создание первого тестового проекта с xUnit....993

35.3 Запуск тестов командой dotnet test....996

35.4 Ссылка на ваше приложение из тестового проекта ....997

35.5 Добавление модульных тестов с атрибутами Fact и Theory....1000

35.6 Тестирование условий сбоя....1004

Резюме....1005

36....1007

Тестирование приложений ASP.NET Core....1007

36.1 Модульное тестирование пользовательского промежуточного ПО....1008

36.2 Модульное тестирование контроллеров API и конечных точек минимальных API....1011

36.3 Интеграционное тестирование: тестирование всего приложения в памяти....1016

36.3.1 Создание TestServer с помощью пакета Test Host....1017

36.3.2 Тестирование приложения с помощью WebApplicationFactory ....1020

36.3.3 Замена зависимостей в классе WebApplicationFactory ....1023

36.3.4 Уменьшение дублирования кода за счет создания своего класса WebApplicationFactory....1025

36.4 Изоляция базы данных с помощью поставщика EF Core в памяти....1027

Резюме....1032

Приложение А. Подготовка окружения разработки....1034

А.1 Установка .NET SDK ....1035

А.2 Выбор интегрированной среды разработки или редактора кода....1036

А.2.1 Visual Studio (Windows)....1037

А.2.2 Rider от компании JetBrains (Windows, Linux, macOS)....1038

А.2.3 Visual Studio для Mac (macOS)....1039

А.2.4 Visual Studio Code (Windows, Linux, macOS)....1039

Приложение Б. Полезные ссылки....1041

Б.1 Список литературы....1041

Б.2 Анонсы в блогах....1042

Б.3 Документация Microsoft ....1043

Б.4 Ссылки по темам, связанным с безопасностью....1043

Б.5 Репозитории ASP.NET Core на GitHub....1044

Б.6 Инструменты и сервисы ....1044

Б.7 Блоги ASP.NET Core....1044

Б.8 Ссылки на видео....1045

Фреймворк ASP.NET Core предоставляет все необходимое для создания веб-приложений профессионального качества. Благодаря повышающим производительность библиотекам для отрисовки на стороне сервера, безопасным API, простому доступу к данным и многому другому вы потратите свое время на реализацию функциональных возможностей, а не на исследование синтаксиса и отслеживание ошибок. Эта книга — ваш путеводитель.В третьем издании показано, как создавать веб-приложения для эксплуатации в промышленном окружении с помощью ASP.NET Core 7.0. Вы будете учиться на практических примерах, содержательных иллюстрациях и коде с подробными пояснениями. В числе новинок: создание минимальных API, обеспечение безопасности API с помощью токенов на предъявителя, WebApplicationBuilder и многое другое.

Книга предназначена для разработчиков среднего уровня. Примеры написаны на C#.

Рассматриваемые темы:

  • минимальные API для обслуживания JSON;
  • отрисовка на стороне сервера с использованием Razor Pages;
  • доступ к данным с помощью Entity Framework Core;
  • написание собственного промежуточного программного обеспечения и компонентов.

Издание выпущено при поддержке сообщества .NET разработчиков DotNet.Ru.


Похожее:

Список отзывов:

Нет отзывов к книге.