ASP.Net Core в действии
Покупка
Новинка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Автор:
Лок Эндрю
Перевод:
Беликов Д. А.
Год издания: 2021
Кол-во страниц: 906
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование взрослых
ISBN: 978-5-97060-550-9
Артикул: 799581.02.99
Доступ онлайн
В корзину
Эта книга знакомит читателей с основами фреймворка ASP.NET Core, такими как промежуточное ПО, внедрение зависимостей и конфигурация. Автор показывает, как настроить их в соответствии с пользовательскими требованиями. Речь пойдет о том, как добавить аутентификацию и авторизацию в свои приложения, как повысить их безопасность, а также как развертывать их и осуществлять мониторинг. Рассматривается тестирование приложений с использованием модульных и интеграционных тестов. Основное внимание будет уделено тому, как создавать приложения с отрисовкой на стороне сервера, используя страницы Razor и веб-API, а также контроллеры MVC. Книга подойдет как тем, кто является новичком в веб-разработке, так и тем, кто уже имеет опыт использования фреймворка ASP.NET.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Программирование и алгоритмизация
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Эндрю Лок ASP.Net Core в действии
ASP.NET Core in Action SECOND EDITION ANDREW LOCK
ASP.Net Core в действии ЭНДРЮ ЛОК Москва, 2021
УДК 004.438.NET ББК 32.973.26-018.2 Л73 Лок Э. Л73 ASP.Net Core в действии / пер. с анг. Д. А. Беликова. – М.: ДМК Пресс, 2021. – 906 с.: ил. ISBN 978-5-97060-550-9 Эта книга знакомит читателей с основами фреймворка ASP.NET Core, такими как промежуточное ПО, внедрение зависимостей и конфигурация. Автор показывает, как настроить их в соответствии с пользовательскими требованиями. Речь пойдет о том, как добавить аутентификацию и авторизацию в свои приложения, как повысить их безопасность, а также как развертывать их и осуществлять мониторинг. Рассматривается тестирование приложений с использованием модульных и интеграционных тестов. Основное внимание будет уделено тому, как создавать приложения с отрисовкой на стороне сервера, используя страницы Razor и веб-API, а также контроллеры MVC. Книга подойдет как тем, кто является новичком в веб-разработке, так и тем, кто уже имеет опыт использования фреймворка ASP.NET. УДК 004.438.NET ББК 32.973.26-018.2 Original English language edition published by Manning Publications USA, USA. Russian-language edition copyright © 2021 by DMK Press. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN 978-1-6172-9830-1 (англ.) © Manning Publications, 2021 ISBN 978-5-97060-550-9 (рус.) © Перевод, оформление, издание, ДМК Пресс, 2021
Оглавление Часть I НАЧАЛО РАБОТЫ С ASP.NET CORE ....................................................... 31 1 Начало работы с ASP.NET Core ...................................................................... 33 2 Ваше первое приложение .............................................................................. 58 3 Обработка запросов с по мощью конвейера промежуточного ПО ....... 95 4 Создание веб-сайта с помощью страниц Razor ...................................... 130 5 Сопоставление URL-адресов с Razor Pages с использованием маршрутизации ............................................................................................. 164 6 Модель привязки: получение и проверка пользовательского ввода .... 203 7 Визуализация HTML-кода с использованием представлений Razor .... 239 8 Создание форм с помощью тег-хелперов ................................................ 278 9 Создание веб-API для мобильных и клиентских приложений с по мощью MVC ............................................................................................. 313 Часть II СОЗДАНИЕ ПОЛНОЦЕННЫХ ПРИЛОЖЕНИЙ ................................ 350 10 Конфигурация сервисов с по мощью внедрения зависимостей ......... 352 11 Конфигурирование приложения ASP.NETCore ....................................... 394 12 Cохраняем данные с Entity Framework Core ........................................... 432 13 Конвейер фильтров MVC и Razor Pages ................................................... 471 14 Аутентификация: добавляем пользователей в приложение с по мощью ASP.NET Core Identity ............................................................. 513 15 Авторизация: обеспечиваем защиту приложения ............................... 553 16 Публикация и развертывание приложения ............................................ 590 Часть III РАСШИРЕНИЕ ПРИЛОЖЕНИЙ .............................................................. 628 17 Мониторинг и устранение ошибок с помощью журналирования .... 630 18 Повышаем безопасность приложения ..................................................... 667 19 Создание специальных компонентов ...................................................... 710 20 Создание специальных компонентов MVC и Razor Pages .................. 745 21 Вызов удаленных API с помощью IHttpClientFactory .......................... 775 22 Создание фоновых задач и сервисов ........................................................ 799 23 Тестирование приложения .......................................................................... 827
Содержание Предисловие .......................................................................................................... 19 Благодарности ....................................................................................................... 21 Об этой книге ........................................................................................................ 23 Об авторе ................................................................................................................ 29 Об иллюстрации на обложке ............................................................................. 30 Часть I НАЧАЛО РАБОТЫ С ASP.NET CORE ..................... 31 1 Начало работы с ASP.NET Core .................................................... 33 1.1 Введение в ASP.NET Core ......................................................................... 34 1.1.1Использованиевеб-фреймворка ........................................................ 35 1.1.2ЧтотакоеASP.NETCore? ................................................................. 37 1.2 Когда следует отдать предпочтение ASP.NET Core ............................ 40 1.2.1Какиетипыприложенийможносоздавать? ................................... 40 1.2.2Есливыновичокв разработкена.NET ............................................. 43 1.2.3Есливыразработчик,создающийновоеприложение...................... 45 1.2.4ПереноссуществующегоASP.NET-приложениянаASP.NETCore ..... 50 1.3 Как работает ASP.NET Core? .................................................................... 51 1.3.1Какработаетвеб-запроспопротоколуHTTP? .............................. 52 1.3.2КакASP.NETCoreобрабатываетзапрос? ....................................... 54 1.4 Что вы узнаете из этой книги ................................................................ 56 Резюме .................................................................................................................... 57 2 Ваше первое приложение .................................................................... 58 2.1 Краткий обзор приложения ASP.NET Core .......................................... 60 2.2 Создание вашего первого приложения ASP.NET Core ...................... 62 2.2.1Использованиешаблона .................................................................... 63 2.2.2Сборкаприложения ........................................................................... 66 2.3 Запуск веб-приложения........................................................................... 68 2.4 Разбираемся с макетом проекта ........................................................... 70
Содержание 2.5 Файл проекта .csproj: определение зависимостей ............................ 71 2.6 Класс Program: сборка веб-хоста ........................................................... 74 2.7 Класс Startup: настройка вашего приложения ................................... 77 2.7.1Добавлениеи настройкасервисов .................................................... 79 2.7.2Определяем,какобрабатываютсязапросыс помощьюпромежуточногопрограммногообеспечения ................................... 81 2.8 Создание ответов с по мощью Razor Pages .......................................... 86 2.8.1СозданиеHTMLс помощьюстраницRazor ...................................... 87 2.8.2Логикаобработкизапросовс помощьюPageModelsи обработчиков ................................................................................. 89 Резюме .................................................................................................................... 93 3 Обработка запросов с по мощью конвейера промежуточного ПО .............................................................................. 95 3.1 Что такое промежуточное ПО? .............................................................. 97 3.2 Объединение компонентов в конвейер ............................................ 102 3.2.1Простойсценарийконвейера1:страница приветствия ..................102 3.2.2Простойсценарийконвейера2:обработка статическихфайлов ... 106 3.2.3Простойсценарийконвейера3:приложениесо страницамиRazor ......................................................................................................110 3.3 Обработка ошибок с по мощью промежуточного ПО ..................... 116 3.3.1Просмотрисключенийв окруженииразработки:DeveloperExceptionPage .................................................................... 118 3.3.2Обработкаисключенийв промышленномокружении:ExceptionHandlerMiddleware ............................................................ 119 3.3.3Обработкадругихошибок:StatusCodePagesMiddleware ................ 124 3.3.4 Компонент обработки ошибок и веб-API .......................................... 128 Резюме .................................................................................................................. 129 4 Создание веб-сайта с помощью страниц Razor ........... 130 4.1 Введение в Razor Pages .......................................................................... 132 4.1.1ИзучениетипичнойстраницыRazor .............................................. 132 4.1.2ПаттернпроектированияMVC ..................................................... 134 4.1.3ПрименениепаттернапроектированияMVCк Razor Pages ........ 137 4.1.4ДобавлениеRazorPagesв приложение ............................................ 145 4.2 Сравнение Razor Pages и MVC в ASP.NET Core ................................. 149 4.2.1КонтроллерыMVCв ASP.NETCore ................................................. 149 4.2.2ПреимуществаRazorPages ............................................................. 151 4.2.3КогдавыбиратьконтроллерыMVCвместоRazorPages ............... 154 4.3 Razor Pages и обработчики страниц ................................................... 155 4.3.1Приемпараметровв обработчикахстраниц ................................ 157 4.3.2Возвратответовс помощьюActionResults.................................... 159 Резюме .................................................................................................................. 163 5 Сопоставление URL-адресов с Razor Pages с использованием маршрутизации ......................................... 164 5.1 Что такое маршрутизация? ................................................................... 165 5.2 Маршрутизация в ASP.NET Core .......................................................... 169
Содержание 5.2.1Использованиемаршрутизацииконечныхточекв ASP.NETCore .... 169 5.2.2Маршрутизациянаосновесоглашенийи маршрутизациянаосновеатрибутов ...................................................................... 173 5.2.3Маршрутизацияи страницыRazor ................................................ 176 5.3 Настройка шаблонов маршрутов для страницы Razor .................. 178 5.3.1Добавлениесегментав шаблонмаршрута .................................... 180 5.3.2ПолнаязаменашаблонамаршрутастраницыRazor .................... 181 5.4 Изучение синтаксиса шаблона маршрута ......................................... 182 5.4.1Использованиедополнительныхзначенийи значенийпоумолчанию .................................................................................. 182 5.4.2Добавлениедополнительныхограниченийк параметраммаршрута ....................................................................................... 184 5.4.3СопоставлениепроизвольныхURL-адресовс помощьюуниверсальногопараметра ............................................................. 186 5.5 Генерация URL-адресов из параметров маршрута ......................... 188 5.5.1СозданиеURL-адресовдлястраницыRazor ................................... 189 5.5.2СозданиеURL-адресовдляконтроллераMVC ................................ 190 5.5.3СозданиеURL-адресовс помощьюActionResults ............................. 192 5.5.4СозданиеURL-адресовиздругихчастейвашего приложения ........ 193 5.6 Выбор обработчика страницы для вызова ........................................ 194 5.7 Настройка соглашений с помощью Razor Pages .............................. 197 Резюме .................................................................................................................. 201 6 Модель привязки: получение и проверка пользовательского ввода ................................................................. 203 6.1 Модели в Razor Pages и MVC ................................................................. 204 6.2 От запроса к модели: делаем запрос полезным .............................. 208 6.2.1Связываниепростыхтипов ............................................................ 212 6.2.2Привязкасложныхтипов ................................................................ 216 6.2.3Выбористочникапривязки ............................................................. 221 6.3 Обработка пользовательского ввода с помощью валидации модели .................................................................................. 223 6.3.1Необходимостьвалидациимодели ................................................. 223 6.3.2ИспользованиеатрибутовDataAnnotationsдля валидации .......... 225 6.3.3Валидациямоделинасерверев целяхбезопасности ...................... 228 6.3.4Валидациянасторонеклиентадля улучшенияпользовательскогоинтерфейса ...................................................... 232 6.4 Организация моделей привязки в Razor Pages ................................ 234 Резюме .................................................................................................................. 237 7 Визуализация HTML-кода с использованием представлений Razor .......................................................................... 239 7.1 Представления: визуализация пользовательского интерфейса ..... 241 7.2 Создание представлений Razor ........................................................... 245 7.2.1ПредставленияRazorи сопутствующийкод ................................. 245 7.2.2Знакомствос шаблонамиRazor ..................................................... 247 7.2.3Передачаданныхв представления ................................................. 248 7.3 Создание динамических веб-страниц с помощью Razor .............. 251 7.3.1ИспользованиеC#в шаблонахRazor ............................................... 252
Содержание 7.3.2Добавлениециклови условийв шаблоныRazor .............................. 253 7.3.3ВизуализацияHTMLс помощьюметодаRaw ................................. 256 7.4 Макеты, частичные представления и _ViewStart ............................ 259 7.4.1Использованиемакетовдляобщейразметки ................................ 260 7.4.2Переопределениеродительскихмакетовс помощью секций ......... 262 7.4.3Использованиечастичныхпредставленийдля инкапсуляцииразметки ......................................................................................... 264 7.4.4Выполнениекодав каждомпредставлениис помощью_ViewStartи _ViewImports............................................................... 267 7.5 Выбор представления из контроллера MVC ..................................... 270 Резюме .................................................................................................................. 276 8 Создание форм с помощью тег-хелперов ........................... 278 8.1 Редакторы кода и тег-хелперы ............................................................. 280 8.2 Создание форм с по мощью тег-хелперов ......................................... 283 8.2.1Тег-хелперформы ............................................................................ 288 8.2.2Тег-хелперметки(label) ................................................................. 291 8.2.3Тег-хелперыввода(input)и областитекста(textarea) ................. 292 8.2.4Тег-хелперраскрывающегосясписка ............................................... 296 8.2.5Тег-хелперысообщенийвалидациии сводкисообщений(ValidationSummary) ....................................................................... 302 8.3 Создание ссылок с по мощью тег-хелпера якоря (Anchor Tag Helper) ................................................................................. 305 8.4 Сброс кеша с по мощью тег-хелпера добавления версии (Append Version Tag Helper) .................................................... 307 8.5 Использование условной разметки с помощью тег-хелпера окружения .......................................................................... 308 Резюме .................................................................................................................. 310 9 Создание веб-API для мобильных и клиентских приложений с по мощью MVC ........................................................ 313 9.1 Что такое веб-API, и когда его следует использовать? ................... 314 9.2 Создание первого проекта веб-API .................................................... 318 9.3 Применение паттерна проектирования MVC к веб-API ................ 326 9.4 Маршрутизация на основе атрибутов: связывание методов действий с URL-адресами ..................................................... 330 9.4.1Сочетаниеатрибутовмаршрута,чтобываши шаблонымаршрутовследовалипринципуDRY ............................................. 333 9.4.2Использованиезаменымаркерадляуменьшениядублированияпримаршрутизациинаосновеатрибутов ............. 334 9.4.3ОбработкаHTTP-методовс помощьюмаршрутизациинаосновеатрибутов ...................................................................... 335 9.5 Использование общепринятых соглашений с атрибутом [ApiController]........................................................................................... 337 9.6 Генерация ответа от модели ................................................................. 341 9.6.1Настройкаформатеровпоумолчанию:добавляем поддержкуXML ............................................................................... 343 9.6.2Выборформатаответас помощьюсогласованиясодержимого .... 345 Резюме .................................................................................................................. 347
Содержание Часть II СОЗДАНИЕ ПОЛНОЦЕННЫХ ПРИЛОЖЕНИЙ .......................................................................... 350 10 Конфигурация сервисов с по мощью внедрения зависимостей ............................................................................................. 352 10.1 Введение во внедрение зависимостей............................................... 353 10.1.1Преимуществавнедрениязависимостей ....................................... 354 10.1.2Созданиеслабосвязанногокода ...................................................... 360 10.1.3Внедрениезависимостейв ASP.NETCore ....................................... 362 10.2 Использование контейнера внедрения зависимостей .................. 364 10.2.1ДобавлениесервисовфреймворкаASP.NETCoreв контейнер ....... 364 10.2.2Регистрациясобственныхсервисовв контейнере ......................... 367 10.2.3Регистрациясервисовс использованиемобъектови лямбда-функций ........................................................................... 369 10.2.4Многократнаярегистрациясервисав контейнере ....................... 374 10.2.5Внедрениесервисовв методыдействий,обработчики страници представления............................................................... 378 10.3 Жизненный цикл: когда создаются сервисы? ................................. 382 10.3.1Transient:всеуникально .................................................................. 385 10.3.2Scoped:давайтедержатьсявместе ............................................... 386 10.3.3Singleton:можетбытьтолькоодин .............................................. 387 10.3.4Следитезазахваченнымизависимостями .................................... 388 Резюме .................................................................................................................. 392 11 Конфигурирование приложения ASP.NETCore ................ 394 11.1 Представляем модель конфигурации ASP.NET Core ....................... 395 11.2 Конфигурирование приложения с по мощью метода CreateDefaultBuilder ................................................................................ 397 11.3 Создание объекта конфигурации для вашего приложения .......... 399 11.3.1Добавлениепоставщикаконфигурациив файле Program.cs .......... 402 11.3.2Использованиенесколькихпоставщиковдля переопределениязначенийконфигурации ................................ 405 11.3.3Безопасноехранениесекретовконфигурации ................................ 407 11.3.4Перезагрузказначенийконфигурацииприихизменении ............... 412 11.4 Использование строго типизированных настроек с паттерном Options ............................................................................... 413 11.4.1Знакомствос интерфейсомIOptions ............................................. 415 11.4.2Перезагрузкастроготипизированныхпараметровс помощьюIOptionsSnapshot ........................................................... 417 11.4.3Разработкаклассовпараметровдляавтоматическойпривязки ... 418 11.4.4Связываниестроготипизированныхнастроекбез интерфейсаIOptions ................................................................. 420 11.5 Настройка приложения для нескольких окружений ...................... 422 11.5.1Определениеокруженияразмещения.............................................. 422 11.5.2Загрузкафайловконфигурациидляконкретногоокружения .......... 424 11.5.3Задаемокружениеразмещения ...................................................... 426 Резюме .................................................................................................................. 430
Содержание 12 Cохраняем данные с Entity Framework Core ..................... 432 12.1 Знакомство с Entity Framework Core ................................................... 434 12.1.1ЧтотакоеEFCore?......................................................................... 434 12.1.2Зачемиспользоватьинструментобъектно-реляционногоотображения? ................................................................................. 436 12.1.3КогдаследуетвыбиратьEFCore? .................................................. 437 12.1.4Отображениебазыданныхв кодприложения ............................... 439 12.2 Добавляем EF Core в приложение ....................................................... 441 12.2.1Выборпровайдерабазыданныхи установкаEFCore .................... 443 12.2.2Созданиемоделиданных ................................................................. 444 12.2.3Регистрацияконтекстаданных .................................................... 447 12.3 Управление изменениями с помощью миграций .......................... 448 12.3.1Создаемпервуюмиграцию .............................................................. 449 12.3.2Добавляемвторуюмиграцию ......................................................... 452 12.4 Выполнение запроса к базе данных и сохранение в ней данных ....................................................................................................... 455 12.4.1Созданиезаписи .............................................................................. 455 12.4.2Загрузкасписказаписей .................................................................. 458 12.4.3Загрузкаоднойзаписи ..................................................................... 460 12.4.4Обновлениемодели ......................................................................... 462 12.5 Использование EF Core в промышленных приложениях ............... 466 Резюме .................................................................................................................. 468 13 Конвейер фильтров MVC и Razor Pages .............................. 471 13.1 Что такое фильтры, и когда их использовать ................................... 473 13.1.1КонвейерфильтровMVC ................................................................ 474 13.1.2КонвейерфильтровRazorPages ..................................................... 476 13.1.3ФильтрыилипромежуточноеПО:чтовыбрать? ........................ 478 13.1.4Созданиепростогофильтра .......................................................... 479 13.1.5Добавляемфильтрык действиям,контроллерам,страницамRazorPagesи глобально ................................................................... 482 13.1.6Порядоквыполненияфильтров ...................................................... 485 13.2 Создание фильтров для приложения ................................................. 487 13.2.1Фильтрыавторизации:защитаAPI ............................................. 490 13.2.2Фильтрыресурсов:прерываниевыполненияметодовдействий .... 492 13.2.3Фильтрыдействий:настройкапривязкимоделии результатовдействий ................................................................ 494 13.2.4Фильтрыисключений:собственнаяобработкаисключенийдляметодовдействий ................................................ 499 13.2.5Фильтрырезультатов:настройкарезультатовдействийпередихвыполнением ..................................................... 501 13.2.6Фильтрыстраниц:настройкапривязкимоделидля RazorPages ................................................................................ 504 13.3 Прерывание выполнения конвейера ................................................. 506 13.4 Использование внедрения зависимостей с атрибутами фильтра ...................................................................................................... 508 Резюме .................................................................................................................. 511
Содержание 14 Аутентификация: добавляем пользователей в приложение с по мощью ASP.NET Core Identity ......... 513 14.1 Знакомство с аутентификацией и авторизацией ........................... 515 14.1.1Пользователии утвержденияв ASP.NETCore ............................... 515 14.1.2Аутентификацияв ASP.NETCore:сервисыи промежуточноеПО ...................................................................... 517 14.1.3АутентификациядляAPIи распределенныхприложений ............. 520 14.2 Что такое ASP.NET Core Identity? ......................................................... 524 14.3 Создание проекта, в котором используется ASP.NET Core Identity .............................................................................................. 527 14.3.1Созданиепроектаизшаблона ........................................................ 527 14.3.2Изучениешаблонав Обозревателерешений .................................. 529 14.3.3МодельданныхASP.NETCoreIdentity ............................................. 533 14.3.4Взаимодействиес ASP.NETCoreIdentity ........................................ 535 14.4 Добавляем ASP.NET Core Identity в существующий проект .......... 538 14.4.1НастройкасервисовASP.NETCoreIdentityи промежуточногоПО .................................................................... 539 14.4.2ОбновлениемоделиданныхEFCoreдляподдержкиIdentity ........... 541 14.4.3ОбновлениепредставленийRazorдлясвязис пользовательскиминтерфейсомIdentity ..................................... 542 14.5 Настройка страницы в пользовательском интерфейсе ASP.NET Core Identity по умолчанию ................................................. 544 14.6 Управление пользователями: добавление специальных данных для пользователей.......................................... 547 Резюме .................................................................................................................. 550 15 Авторизация: обеспечиваем защиту приложения ................................................................................................. 553 15.1 Знакомство с авторизацией ................................................................. 555 15.2 Авторизация в ASP.NET Core ................................................................ 558 15.2.1Предотвращениедоступаанонимныхпользователейк вашемуприложению ..................................................................... 560 15.2.2Обработказапросов,непрошедшихаутентификацию ................ 562 15.3 Использование политик для авторизации на основе утверждений............................................................................................. 565 15.4 Создание специальных политик авторизации ................................ 569 15.4.1Требованияи обработчики:строительныеблокиполитики ........ 569 15.4.2Созданиеполитикисоспециальнымтребованиеми обработчиком .............................................................................. 571 15.5 Управление доступом с авторизацией на основе ресурсов .......... 577 15.5.1Ручнаяавторизациязапросовс помощьюинтерфейсаIAuthorizationService ........................................................................ 579 15.5.2СозданиеобработчикаAuthorizationHandlerна основе ресурсов ........................................................................................... 582 15.6 Скрытие элементов в шаблонах Razor от незарегистрированных пользователей ........................................ 585 Резюме .................................................................................................................. 588
Содержание 16 Публикация и развертывание приложения ..................... 590 16.1 Модель хостинга ASP.NET Core ............................................................ 592 16.1.1Запуски публикацияприложенияASP.NETCore ............................ 594 16.1.2Выборметодаразвертываниядлявашегоприложения ................ 598 16.2 Публикация приложения в IIS ............................................................. 600 16.2.1КонфигурированиеIISдляASP.NETCore ........................................ 600 16.2.2Подготовкаи публикацияприложенияв IIS ................................... 603 16.3 Размещение приложения в Linux........................................................ 606 16.3.1ЗапускприложенияASP.NETCoreзаобратнымпрокси-серверомв Linux .................................................................. 606 16.3.2Подготовкаприложенияк развертываниюв Linux ....................... 609 16.4 Настройка URL-адресов приложения ................................................. 611 16.5 Оптимизация клиентских ресурсов с помощью BundlerMinifier ... 615 16.5.1Ускорениеработыприложенияс помощьюупаковкии минификациикода........................................................................ 618 16.5.2ДобавляемBundlerMinifierв приложение ........................................ 620 16.5.3Использованиеминифицированныхфайловв промышленномокружениис помощьютег-хелпераокружения .............................. 623 16.5.4Обслуживаниечастоиспользуемыхфайловизсетидоставкисодержимого .................................................................... 624 Резюме .................................................................................................................. 625 Часть III РАСШИРЕНИЕ ПРИЛОЖЕНИЙ ................................ 628 17 Мониторинг и устранение ошибок с помощью журналирования ..................................................................................... 630 17.1 Эффективное использование журналирования в промышленном приложении ........................................................... 632 17.1.1Выявлениепроблемс помощьюспециальныхсообщенийжурнала ........................................................................................... 633 17.1.2АбстракциижурналированияASP.NETCore .................................. 635 17.2 Добавление сообщений журнала в приложение ............................. 636 17.2.1Уровеньсообщенияжурнала:наскольковажносообщениежурнала? ......................................................................................... 639 17.2.2Категориясообщенияжурнала:какойкомпонентсоздалжурнал ............................................................................................. 642 17.2.3Форматированиесообщенийи сборзначенийпараметров .............. 643 17.3 Контроль места записи журналов с помощью поставщиков журналирования ...................................................................................... 645 17.3.1Добавлениеновогопоставщикажурналированияв приложение .... 646 17.3.2ЗаменаILoggerFactoryпоумолчаниюнаSerilog ............................. 649 17.4 Изменение избыточности сообщений журналов с по мощью фильтрации ........................................................................ 653 17.5 Структурное журналирование: создание полезных сообщений журналов с возможностью поиска ................................ 658 17.5.1Добавлениепоставщикаструктурногожурналированияв приложение ................................................................................... 660
Содержание 17.5.2Использованиеобластейжурналированиядля добавлениядополнительныхсвойствв сообщения журнала ............................ 663 Резюме .................................................................................................................. 665 18 Повышаем безопасность приложения ................................. 667 18.1 Добавляем протокол HTTPS в приложение ...................................... 669 18.1.1ИспользованиеHTTPS-сертификатовдляразработки ................ 672 18.1.2НастройкаKestrelдляиспользованиясертификатаHTTPSв промышленномокружении ........................................................... 674 18.1.3Делаемтак,чтобыпротоколHTTPSиспользовалсядля всегоприложения ...................................................................... 676 18.2 Защита от межсайтового скриптинга ................................................ 681 18.3 Защита от межсайтовой подделки запросов (CSRF) ....................... 685 18.4 Вызов веб-API из других доменов с помощью CORS ..................... 691 18.4.1Разбираемсяс CORSи тем,каконработает ................................ 692 18.4.2ДобавлениеглобальнойполитикиCORSко всему приложению ..... 694 18.4.3ДобавляемCORSк определеннымдействиямвеб-APIс помощьюатрибутаEnableCors ................................................... 697 18.4.4НастройкаполитикCORS .............................................................. 698 18.5 Изучение других векторов атак ........................................................... 699 18.5.1Обнаружениеи предотвращениеатакс открытымперенаправлением ........................................................................... 700 18.5.2Предотвращениеатакс использованиемвнедренияSQL-кодас помощьюEFCoreи параметризации ........................... 702 18.5.3Предотвращениенебезопасныхпрямыхссылокна объекты ......... 704 18.5.4Защитапаролейи данныхпользователей ..................................... 705 Резюме .................................................................................................................. 707 19 Создание специальных компонентов .................................... 710 19.1 Настройка конвейера промежуточного ПО ...................................... 711 19.1.1Созданиепростыхконечныхточекс помощьюметодарасширенияRun .............................................................................. 713 19.1.2Ветвлениеконвейерас помощьюметодарасширения Map .......... 714 19.1.3Добавлениев конвейерс помощьюметодарасширения Use .......... 718 19.1.4Созданиеспециальногокомпонентапромежуточного ПО ............ 721 19.2 Создание специальных конечных точек с помощью маршрутизации конечных точек ........................................................ 724 19.2.1Созданиеспециальногокомпонентамаршрутизацииконечныхточек ............................................................................... 725 19.2.2Созданиепростыхконечныхточекс помощьюMapGetи WriteJsonAsync .............................................................................. 729 19.2.3Применениеавторизациик конечнымточкам .............................. 731 19.3 Работа с требованиями к сложной конфигурации ......................... 733 19.3.1Частичноесозданиеконфигурациидлянастройкидополнительныхпоставщиков ....................................................... 734 19.3.2ИспользованиесервисовдлянастройкиIOptionsс помощьюIConfigureOptions ........................................................... 736 19.4 Использование стороннего контейнера внедрения зависимостей ........................................................................................... 739 Резюме .................................................................................................................. 743
Содержание 20 Создание специальных компонентов MVC и Razor Pages .............................................................................................. 745 20.1 Создание специального тег-хелпера Razor ....................................... 746 20.1.1Выводинформацииобокружениис помощью специальноготег-хелпера ............................................................... 747 20.1.2Созданиеспециальноготег-хелперадляусловногоскрытияэлементов ........................................................................ 751 20.1.3Созданиетег-хелперадляпреобразованияMarkdownв HTML ......... 753 20.2 Компоненты представления: добавление логики в частичные представления ................................................................. 755 20.3 Создание специального атрибута валидации .................................. 761 20.4 Замена фреймворка валидации на FluentValidation ...................... 766 20.4.1СравнениеFluentValidationи атрибутовDataAnnotations ............ 767 20.4.2ДобавляемFluentValidationв приложение ...................................... 771 Резюме .................................................................................................................. 773 21 Вызов удаленных API с помощью IHttpClientFactory ................................................................................... 775 21.1 Вызов API для протокола HTTP: проблема с классом HttpClient .................................................................................................. 776 21.2 Создание экземпляров класса HttpClient с помощью интерфейса IHttpClientFactory ............................................................ 782 21.2.1ИспользованиеIHttpClientFactoryдляуправленияжизненнымцикломHttpClientHandler ............................................ 783 21.2.2Настройкаименованныхклиентоввовремярегистрации ........... 786 21.2.3Использованиетипизированныхклиентовдля инкапсуляцииHTTP-вызовов .................................................... 788 21.3 Обработка временных ошибок HTTP с помощью библиотеки Polly...................................................................................... 791 21.4 Создание специального обработчика HttpMessageHandler .......... 794 Резюме .................................................................................................................. 797 22 Создание фоновых задач и сервисов ........................................ 799 22.1 Запуск фоновых задач с по мощью интерфейса IHostedService ........................................................................................... 800 22.1.1Запускфоновыхзадачпотаймеру ................................................. 801 22.1.2Использованиесервисовс жизненнымцикломScopedв фоновыхзадачах ........................................................................... 805 22.2 Создание сервисов рабочей роли без пользовательского интерфейса с использованием IHost.................................................. 807 22.2.1Созданиесервисарабочейролиизшаблона.................................... 809 22.2.2Запусксервисоврабочейролив промышленномокружении .......... 812 22.3 Координация фоновых задач с по мощью Quartz.NET ................... 815 22.3.1УстановкаQuartz.NETв приложениеASP.NETCore ...................... 816 22.3.2Настройказапусказаданияпорасписаниюс помощьюQuartz.NET ...................................................................................... 818
Содержание 22.3.3Использованиекластеризациидлядобавленияизбыточностив фоновыезадачи ............................................................................. 821 Резюме .................................................................................................................. 825 23 Тестирование приложения ............................................................. 827 23.1 Тестирование в ASP.NET Core ............................................................... 829 23.2 Модульное тестирование с xUnit ......................................................... 831 23.2.1Созданиепервоготестовогопроекта ............................................ 831 23.2.2Запусктестовкомандойdotnettest ............................................... 833 23.2.3Ссылканаприложениеизтестовогопроекта .............................. 835 23.2.4Добавлениемодульныхтестовс атрибутамиFactи Theory ........ 838 23.2.5Тестированиеусловийотказа ........................................................ 842 23.3 Модульное тестирование специального промежуточного ПО .... 843 23.4 Модульное тестирование API-контроллеров ................................... 846 23.5 Интеграционное тестирование: тестирование всего приложения в памяти ............................................................................ 850 23.5.1СозданиеTestServerс помощьюпакетаTestHost ........................... 851 23.5.2Тестированиеприложенияс помощьюклассаWebApplicationFactory ..................................................................... 854 23.5.3Заменазависимостейв классеWebApplicationFactory ................... 857 23.5.4УменьшениедублированиякодазасчетсозданияспециальногоклассаWebApplicationFactory ................................... 859 23.6 Изоляция базы данных с по мощью поставщика EF Core в памяти .................................................................................................... 861 Резюме .................................................................................................................. 866 ПриложениеА.Подготовкаокружения разработки .................................... 869 ПриложениеВ.Экосистема.NET ...................................................................... 876 ПриложениеC.Полезныессылки ....................................................................... 895 Предметныйуказатель ..................................................................................... 901
Вступительноесловоот сообщества .NET уже много лет является одним из лидирующих фреймворков для разработки веб-приложений. Пройдя длинный путь от ASP.NET до современного ASP.NET Core, он вобрал в себя все лучшие подходы к разработке приложений с отрисовкой на стороне сервера и веб-API-приложений. ASP.NET Core – продукт с открытым исходным кодом, каждый может изучить любой аспект его работы. Однако объем кода велик, и не так- то просто сразу понять, что искать и как разбираться с ним. Microsoft предоставляет отличную документацию по основам серверной веб- разработки и ASP.NET Core на официальном сайте, однако этого может быть недостаточно для выстраивания целостной картины. Именно поэтому данная книга очень ценна. Автор превосходно знает ASP.NET Core, работал с ним с первых версий и как никто другой понимает, какие аспекты фреймворка наиболее важны для его успешного использования. Разработчику, помимо работы с основной логикой приложения, важно понимать, как работать с настройками, журналировани- ем, авторизацией, как обеспечивать безопасность приложений. Все эти темы тщательно рассмотрены в книге. Автору удалось охватить широту фреймворка, рассмотрев большое количество различных аспектов, и при этом достаточно глубоко разобрать многие из них. Все это позволяет рассматривать эту книгу как отличный способ подробного знакомства с разработкой серверных приложений на .NET. Систематизированной информации об ASP.NET Core на русском языке мало. Фреймворк быстро развивается, постоянно появляются новые термины, и даже те, что давно используются, не всегда имеют устоявшийся перевод. Мы обсуждали, спорили, думали о том, как читатели будут искать термины в сети интернет, как они звучат в неформальных беседах. Что-то получилось хорошо, что-то не очень, но в целом мы довольны результатом и рады, что такая интересная и полезная книга есть теперь и на русском языке. Отдельная благодарность автору за простые и по-
Вступительное слово от сообщества нятные примеры кода и отличные иллюстрации, наглядно демонстрирующие объясняемые концепции. Добро пожаловать в мир ASP.NET Core, и приятного чтения! Российскоесообщество.NETразработчиковDotNet.Ru Над переводом работали представители сообщества DotNet.Ru: Игорь Лабутин; Андрей Беленцов; Максим Шошин; Вадим Мингажев; Сергей Бензенко; Радмир Тагиров; Эмиль Янгиров; Анатолий Кулаков.
Предисловие ASP.NET Core 5.0 появился в 2020 году, более чем через четыре года после выпуска ASP.NET Core 1.0, но ASP.NET также имеет долгую историю, которая послужила основой и стимулом для развития ASP.NET Core. Microsoft выпустила первую версию ASP.NET в 2002 году как часть платформы .NET Framework 1.0. С тех пор она прошла несколько выпусков, в каждом из которых были добавлены функции и расширяемость. Однако каждый выпуск был построен на основе .NET Framework, поэтому она предустановлена во всех версиях Windows. Это приносит смешанные преимущества: с одной стороны, сегодня ASP.NET 4.x является надежной, проверенной в боях платформой для создания современных приложений для ОС Windows. С другой стороны, она ограничена этой зависимостью – изменения в базовой платформе .NET Framework имеют далеко идущие последствия, в результате чего наблю дается замедление скорости развертывания, а это оставляет за бортом многих разработчиков, создающих и развертывающих приложения для Linux или macOS. Когда я впервые начал изучать ASP.NET Core, я был одним из таких разработчиков. Будучи в душе пользователем Windows, я получил от свое го работодателя компьютер с macOS и поэтому все время работал на виртуальной машине. ASP.NET Core обещал все это изменить, позволив вести разработку и на компьютере с Windows, и на компьютере с macOS. Можно сказать, что я опоздал во многих отношениях, проявляя активный интерес только перед выходом релиза-кандидата ASP.NET Core RC2. К тому моменту существовало уже восемь бета-версий, многие из которых содержали существенные критические изменения. Не погружаясь во все это полностью до выхода RC2, я избавился от сырых инструментов и меняющихся API. То, что я увидел в тот момент, меня очень впечатлило. ASP.NET Core позволяет разработчикам использовать имеющиеся у них знания о платформе .NET и приложениях ASP.NET MVC, в частности используя текущие передовые практики, такие как внедрение зависимостей, строго типизированная конфигурация и журналирование. Кроме того, мож-
Предисловие но было создавать и развертывать кросс-платформенные приложения. Я не устоял. Эта книга появилась во многом благодаря моему подходу к изучению ASP.NET Core. Вместо того чтобы просто читать документацию и статьи в блогах, я решил попробовать что-то новое и начать писать о том, что я узнал. Каждую неделю я посвящал время изучению нового аспекта ASP. NET Core и писал об этом сообщение в блоге. Когда появилась возможность написать книгу, я ухватился за этот шанс – это еще один повод подробно изучить фреймворк! С тех пор, как я начал писать эту книгу, многое изменилось как в отношении самой книги, так и ASP.NET Core. Первый крупный выпуск фреймворка в июне 2016 года по-прежнему имел много шероховатостей, в частности что касалось работы с инструментами. С выпуском .NET 5.0 в ноябре 2020 года ASP.NET Core действительно стал самостоятельным: API и инструменты достигли зрелого уровня. Данная книга нацелена на версию .NET 5.0 для ASP.NET Core, но если вы используете хотя бы версию . NET Core 3.1, то сможете без проблем работать с этим изданием. В этой книге рассказывается обо всем, что вам нужно для начала работы с ASP.NET Core, независимо от того, новичок ли вы в веб-разработке или уже являетесь разработчиком ASP.NET. В ней очень много внимания уделяется самому фреймворку, поэтому я не буду вдаваться в подробности, касающиеся клиентских фреймворков, таких как Angular и React, или таких технологий, как Docker. Я также не описываю все новые функции . NET 5.0, такие как Blazor и gRPC. Вместо этого я даю ссылки, по которым вы можете найти дополнительную информацию. Мы сосредоточимся на создании приложений с отрисовкой на стороне сервера, используя страницы Razor и веб-API, применяя контроллеры MVC. Вы познакомитесь с основами ASP.NET Core, такими как промежуточное ПО, внедрение зависимостей и конфигурация, а также узнаете, как настроить их в соответствии со своими требованиями. Вы узнаете, как добавить аутентификацию и авторизацию в свои приложения, как повысить их безопасность, а также как развертывать их и осуществлять мониторинг. Наконец, вы узнаете, как тестировать приложения, используя модульные и интеграционные тесты. Лично мне приятно работать с приложениями ASP.NET Core по сравнению с приложениями, использующими предыдущую версию ASP.NET, и надеюсь, что эта страсть проявится в данной книге!
Благодарности Хотя на обложке этой книги только одно имя, множество людей внесли свой вклад как в ее написание, так и в публикацию. В этом разделе я хотел бы поблагодарить всех, кто поддерживал меня, оказывал содействие и терпел меня в течение прошлого года. Прежде всего я хочу поблагодарить свою девушку Бекки. Твоя постоянная поддержка и воодушевление – все для меня. Они помогли мне пережить этот напряженный период. Ты приняла на себя всю тяжесть этого стресса и давления, и я бесконечно благодарен тебе. Безмерно люблю тебя. Я также хотел бы поблагодарить всю свою семью за их поддержку. В частности, моих родителей, Жен и Боба, за то, что терпели мои разглагольствования, и свою сестру, Аманду, за все ее веселые беседы. На профессиональном уровне я хотел бы поблагодарить издательство Manning за предоставленную мне возможность. Брайан Сойер «нашел» меня в первом издании этой книги и побудил меня заняться вторым изданием. Марина Майклс стала моим редактором-консультантом по ауди тории второй раз подряд и снова была то дотошной, то критически настроенной, то обнадеживающей и восторженной. Книга, несомненно, стала лучше благодаря вашему участию. Я также благодарю редактора проекта Дейдру Хиам, редактора Энди Кэрролла, своего корректора Джейсона Эверетта и редактора-рецензента Михаэла Батиника. Я благодарен техническому редактору Марку Элстону и корректору Тане Уилке. Марк оказал неоценимую поддержку, подчеркнув мои неверные предположения и технические предубеждения, касающиеся работы с хорошо знакомым мне фреймворком. Таня Уилке подтвердила, что написанный мной код действительно работает и что он не лишен смысла. Я сердечно благодарю всех сотрудников Manning, которые помогли издать эту книгу и вывести ее на рынок. Я также хотел бы поблагодарить всех рецензентов MEAP за их комментарии, которые помогли улучшить книгу. Я бы никогда не смог написать ее, если бы не отличный контент, созданный сообществом .NET и теми пользователями, на которых я подпи-
Благодарности сан в Twitter. В частности, спасибо Джону Гэллоуэю за регулярное размещение моего блога на форуме сообщества ASP.NET. Наконец, спасибо всем друзьям, которые воодушевляли и поддерживали меня и в целом проявляли интерес. Возможно, нам не удавалось встречаться настолько часто, насколько нам хотелось бы, но я с нетерпением жду возможности как можно скорее собраться вместе и выпить. Благодарю всех рецензентов: Эла Пезевски (Al Pezewski), Бена Мак- намару (Ben McNamara), Даниэля Васкеса (Daniel Vásquez), Филипа Вой- чешина (Filip Wojcieszyn), Фостера Хейнса (Foster Haines), Густаво Филипе Рамоса Гомеса (Gustavo Filipe Ramos Gomes), Жана-Франсуа Морена (Jean-François Morin), Джоэля Котарски (Joel Kotarski), Джона Гатри (John Guthrie), Хуана Луиса Барреду (Juan Luis Barreda), Луиса Му (Luis Moux), Майка Эриксона (Mike Erickson), Раушана Джа (Raushan Jha), Роба Ройт- ча (Rob Ruetsch), Рона Лиза (Ron Lease), Рубена Вандегинсте (Ruben Van- deginste), Сау Фай Фонг (Sau Fai Fong), Стива Лава (Steve Love), Таню Уилке (Tanya Wilke), Винсента Делкойна (Vincent Delcoigne) и Уиллиса Г. Хэмптона (Willis G. Hampton) – ваши предложения помогли сделать эту книгу лучше.
Доступ онлайн
В корзину