Содержание
Об авторе 19
Часть I. Введение в инфраструктуру ASP.NET Core MVC 2 21
Глава 1. Основы ASP.NET Core MVC 22
История развития ASP.NET Core MVC 22
ASP.NET Web Forms 23
Первоначальная инфраструктура MVC Framework 24
Обзор ASP.NET Core 25
Что нового в ASP.NET Core MVC 2? 26
Основные преимущества ASP.NET Core MVC 26
Что необходимо знать? 29
Какова структура книги? 30
Часть I. Введение в инфраструктуру ASP.NET Core MVC 30
Часть II. Подробные сведения об инфраструктуре ASP.NET Core MVC 30
Где можно получить код примеров? 30
Резюме 30
Глава 2. Ваше первое приложение MVC 31
Установка Visual Studio 31
Установка .NET Core 2.0 SDK 32
Создание нового проекта ASP.NET Core MVC 32
Добавление контроллера 37
Понятие маршрутов 39
Визуализация веб-страниц 39
Создание и визуализация представления 39
Добавление динамического вывода 43
Создание простого приложения для ввода данных 44
Предварительная настройка 44
Проектирование модели данных 46
Создание второго действия и строго типизированного представления 46
Ссылка на методы действий 48
Построение формы 49
Получение данных формы 51
Добавление проверки достоверности 59
Стилизация содержимого 65
Резюме 71
Глава 3. Паттерн, проекты и соглашения MVC 72
История создания MVC 72
Особенности паттерна MVC 72
Понятие моделей 73
Понятие контроллеров 74
Понятие представлений 74
Реализация паттерна MVC в ASP.NET Core 74
Сравнение MVC с другими паттернами 76
Паттерн “Интеллектуальный пользовательский интерфейс” 76
Содержание 7
Проекты ASP.NET Core MVC 80
Создание проекта 80
Соглашения в проекте MVC 84
Резюме 86
Глава 4. Важные функциональные возможности языка C# 87
Подготовка проекта для примера 88
Включение ASP.NET Core MVC 89
Создание компонентов приложения MVC 89
Использование null-условной операции 91
Связывание в цепочки null-условных операций 92
Комбинирование null-условной операции и операции объединения с null 94
Использование автоматически реализуемых свойств 95
Использование инициализаторов автоматически реализуемых свойств 95
Создание автоматически реализуемых свойств только для чтения 96
Использование интерполяции строк 98
Использование инициализаторов объектов и коллекций 99
Использование инициализатора индексированной коллекции 100
Сопоставление с образцом 101
Сопоставление с образцом в операторах switch 102
Использование расширяющих методов 103
Применение расширяющих методов к интерфейсу 105
Создание фильтрующих расширяющих методов 106
Использование лямбда-выражений 108
Определение функций 109
Использование методов и свойств в форме лямбда-выражений 112
Использование автоматического выведения типа и анонимных типов 114
Использование анонимных типов 114
Использование асинхронных методов 116
Работа с задачами напрямую 117
Применение ключевых слов async и await 118
Получение имен 120
Резюме 121
Глава 5. Работа с Razor 122
Подготовка проекта для примера 123
Определение модели 124
Создание контроллера 124
Создание представления 125
Работа с объектом модели 126
Использование файла импортирования представлений 128
Работа с компоновками 129
Создание компоновки 130
Применение компоновки 132
Использование файла запуска представления 133
Использование выражений Razor 135
Вставка значений данных 136
Установка значений атрибутов 137
Использование условных операторов 138
Проход по содержимому массивов и коллекций 140
Резюме 142
8 Содержание
Глава 6. Работа с Visual Studio 143
Подготовка проекта для примера 143
Создание модели 144
Создание контроллера и представления 145
Управление программными пакетами 146
Инструмент NuGet 147
Инструмент Bower 149
Итеративная разработка 153
Внесение изменений в представления Razor 153
Внесение изменений в классы C# 154
Использование средства Browser Link 162
Подготовка файлов JavaScript и CSS для развертывания 167
Включение доставки статического содержимого 168
Добавление в проект статического содержимого 168
Обновление представления 170
Пакетирование и минификация в приложениях MVC 172
Резюме 175
Глава 7. Модульное тестирование приложений MVC 176
Подготовка проекта для примера 177
Включение встроенных вспомогательных функций дескрипторов 177
Добавление действий к контроллеру 178
Создание формы для ввода данных 178
Обновление представления Index 179
Модульное тестирование приложений MVC 180
Создание проекта модульного тестирования 181
Создание ссылки на проект 182
Изолирование компонентов для модульного тестирования 187
Улучшение модульных тестов 195
Параметризация модульного теста 195
Улучшение фиктивных реализаций 199
Резюме 204
Глава 8. SportsStore: реальное приложение 205
Начало работы 206
Создание проекта MVC 206
Создание проекта модульного тестирования 209
Проверка и запуск приложения 211
Начало работы с моделью предметной области 212
Создание хранилища 212
Создание фиктивного хранилища 213
Регистрация службы хранилища 214
Отображение списка товаров 215
Добавление контроллера 216
Добавление и конфигурирование представления 217
Установка стандартного маршрута 219
Запуск приложения 220
Подготовка базы данных 221
Установка пакета инструментов командной строки Entity Framework Core 221
Создание классов базы данных 222
Создание класса хранилища 223
Содержание 9
Определение строки подключения 223
Конфигурирование приложения 224
Создание миграции базы данных 227
Создание начальных данных 227
Добавление поддержки разбиения на страницы 231
Отображение ссылок на страницы 232
Улучшение URL 241
Стилизация содержимого 242
Установка пакета Bootstrap 243
Применение стилей Bootstrap к компоновке 243
Создание частичного представления 246
Резюме 248
Глава 9. SportsStore: навигация 249
Добавление навигационных элементов управления 249
Фильтрация списка товаров 249
Улучшение схемы URL 253
Построение меню навигации по категориям 257
Корректировка счетчика страниц 265
Построение корзины для покупок 267
Определение модели корзины 268
Создание кнопок добавления в корзину 271
Включение поддержки сеансов 273
Реализация контроллера для корзины 274
Отображение содержимого корзины 277
Резюме 280
Глава 10. SportsStore: завершение построения корзины для покупок 281
Усовершенствование модели корзины с помощью службы 281
Создание класса корзины, осведомленного о хранилище 281
Регистрация службы 282
Упрощение контроллера Cart 283
Завершение функциональности корзины 284
Удаление элементов из корзины 284
Добавление виджета с итоговой информацией по корзине 286
Отправка заказов 289
Создание класса модели 289
Добавление реализации процесса оплаты 290
Реализация обработки заказов 293
Завершение построения контроллера Order 297
Отображение сообщений об ошибках проверки достоверности 300
Отображение итоговой страницы 301
Резюме 302
Глава 11. SportsStore: администрирование 303
Управление заказами 303
Расширение модели 303
Добавление действий и представления 304
Добавление средств управления каталогом 307
Создание контроллера CRUD 308
Реализация представления списка 309
10 Содержание
Редактирование сведений о товарах 311
Создание новых товаров 324
Удаление товаров 326
Резюме 329
Глава 12. SportsStore: защита и развертывание 330
Защита средств администрирования 330
Создание базы данных Identity 330
Применение базовой политики авторизации 335
Создание контроллера Account и представлений 337
Тестирование политики безопасности 341
Развертывание приложения 341
Создание баз данных 341
Подготовка приложения 343
Применение миграций к базам данных 347
Управление начальным заполнением баз данных 347
Развертывание приложения 351
Резюме 355
Глава 13. Работа с Visual Studio Code 356
Настройка среды разработки 356
Установка Node.js 356
Проверка установки Node 358
Установка Git 358
Проверка установки Git 359
Установка Bower 359
Установка .NET Core 359
Проверка установки .NET Core 360
Установка Visual Studio Code 360
Проверка установки Visual Studio Code 361
Установка расширения C# для Visual Studio Code 361
Создание проекта ASP.NET Core 362
Подготовка проекта с помощью Visual Studio Code 363
Управление пакетами клиентской стороны 364
Конфигурирование приложения 366
Построение и запуск проекта 366
Воссоздание приложения PartyInvites 367
Создание модели и хранилища 367
Создание базы данных 370
Создание контроллеров и представлений 372
Модульное тестирование в Visual Studio Code 376
Создание модульного теста 377
Прогон тестов 378
Резюме 378
Часть II. Подробные сведения об инфраструктуре ASP.NET Core MVC 2 379
Глава 14. Конфигурирование приложений 380
Подготовка проекта для примера 382
Конфигурирование проекта 383
Добавление пакетов в проект 384
Добавление пакетов инструментов в проект 386
Содержание 11
Класс Program 387
Анализ деталей конфигурации 388
Класс Startup 391
Службы ASP.NET 394
Промежуточное программное обеспечение ASP.NET 397
Особенности вызова метода Configure() 407
Добавление оставшихся компонентов промежуточного программного обеспечения 411
Конфигурирование приложения 416
Создание конфигурационного файла JSON 418
Использование данных конфигурации 420
Конфигурирование регистрации в журнале 421
Конфигурирование внедрения зависимостей 426
Конфигурирование служб MVC 427
Работа со сложными конфигурациями 428
Создание разных внешних конфигурационных файлов 429
Создание разных методов конфигурирования 430
Создание разных классов конфигурирования 432
Резюме 434
Глава 15. Маршрутизация URL 435
Подготовка проекта для примера 437
Создание класса модели 437
Создание примеров контроллеров 438
Создание представления 439
Введение в шаблоны URL 440
Создание и регистрация простого маршрута 442
Определение стандартных значений 443
Определение встраиваемых стандартных значений 444
Использование статических сегментов URL 447
Определение специальных переменных сегментов 452
Использование специальных переменных в качестве параметров метода действия 454
Определение необязательных сегментов URL 455
Определение маршрутов переменной длины 458
Ограничение маршрутов 460
Ограничение маршрута с использованием регулярного выражения 464
Использование ограничений на основе типов и значений 465
Объединение ограничений 466
Определение специального ограничения 468
Использование маршрутизации с помощью атрибутов 471
Подготовка для маршрутизации с помощью атрибутов 471
Применение маршрутизации с помощью атрибутов 472
Применение ограничений к маршрутам 475
Резюме 476
Глава 16. Дополнительные возможности маршрутизации 477
Подготовка проекта для примера 478
Генерирование исходящих URL в представлениях 479
Генерирование исходящих ссылок 480
Генерирование URL (без ссылок) 490
Генерирование URL в методах действий 491
12 Содержание
Настройка системы маршрутизации 492
Изменение конфигурации системы маршрутизации 492
Создание специального класса маршрута 493
Применение специального класса маршрута 496
Маршрутизация на контроллеры MVC 497
Работа с областями 504
Создание области 505
Создание маршрута для области 505
Заполнение области 506
Генерирование ссылок на действия в областях 509
Полезные советы относительно схемы URL 510
Делайте URL чистыми и понятными человеку 510
GET и POST: выбор правильного запроса 512
Резюме 512
Глава 17. Контроллеры и действия 513
Подготовка проекта для примера 514
Подготовка представлений 515
Понятие контроллеров 517
Создание контроллеров 518
Создание контроллеров POCO 518
Использование базового класса Controller 521
Получение данных контекста 522
Получение данных из объектов контекста 522
Использование параметров метода действия 527
Генерирование ответа 528
Генерирование ответа с использованием объекта контекста 529
Понятие результатов действий 530
Генерирование HTML-ответа 532
Передача данных из метода действия в представление 535
Выполнение перенаправления 541
Возвращение разных типов содержимого 548
Реагирование с помощью содержимого файлов 551
Возвращение ошибок и кодов HTTP 552
Другие классы результатов действий 555
Резюме 555
Глава 18. Внедрение зависимостей 556
Подготовка проекта для примера 557
Создание модели и хранилища 558
Создание контроллера и представления 559
Создание проекта модульного тестирования 561
Создание слабо связанных компонентов 561
Исследование сильно связанных компонентов 562
Введение в средство внедрения зависимостей ASP.NET 568
Подготовка к внедрению зависимостей 569
Конфигурирование поставщика служб 570
Модульное тестирование контроллера с зависимостью 572
Использование цепочек зависимостей 573
Использование внедрения зависимостей для конкретных типов 575
Содержание 13
Жизненные циклы служб 577
Использование переходного жизненного цикла 579
Использование жизненного цикла, ограниченного областью действия 583
Использование жизненного цикла одиночки 585
Использование внедрения в действия 585
Использование атрибутов внедрения в свойства 587
Запрашивание объекта реализации вручную 587
Резюме 588
Глава 19. Фильтры 589
Подготовка проекта для примера 590
Включение SSL 591
Создание контроллера и представления 591
Использование фильтров 593
Понятие фильтров 596
Получение данных контекста 597
Использование фильтров авторизации 598
Создание фильтра авторизации 599
Использование фильтров действий 601
Создание фильтра действий 602
Создание асинхронного фильтра действий 604
Использование фильтров результатов 605
Создание фильтра результатов 606
Создание асинхронного фильтра результатов 608
Создание гибридного фильтра действий/результатов 609
Использование фильтров исключений 611
Создание фильтра исключений 612
Использование внедрения зависимостей для фильтров 614
Распознавание зависимостей в фильтрах 614
Управление жизненными циклами фильтров 618
Создание глобальных фильтров 621
Порядок применения фильтров и его изменение 624
Изменение порядка применения фильтров 626
Резюме 626
Глава 20. Контроллеры API 627
Подготовка проекта для примера 628
Создание модели и хранилища 628
Создание контроллера и представлений 630
Роль контроллеров REST 633
Проблема скорости 633
Проблема эффективности 634
Проблема открытости 635
Введение в REST и контроллеры API 635
Создание контроллера API 637
Тестирование контроллера API 641
Использование контроллера API в браузере 645
Форматирование содержимого 648
Стандартная политика содержимого 648
Согласование содержимого 649
Указание формата данных для действия 652
14 Содержание
Получение формата данных из маршрута или строки запроса 653
Включение полного согласования содержимого 655
Получение разных форматов данных 656
Резюме 657
Глава 21. Представления 658
Подготовка проекта для примера 659
Создание специального механизма визуализации 660
Создание специальной реализации интерфейса IView 662
Создание реализации интерфейса IViewEngine 663
Регистрация специального механизма визуализации 664
Тестирование механизма визуализации 665
Работа с механизмом Razor 667
Подготовка проекта для примера 668
Прояснение представлений Razor 670
Добавление динамического содержимого к представлению Razor 674
Использование разделов компоновки 675
Использование частичных представлений 680
Добавление содержимого JSON в представления 683
Конфигурирование механизма Razor 685
Расширители местоположений представлений 686
Резюме 692
Глава 22. Компоненты представлений 693
Подготовка проекта для примера 694
Создание моделей и хранилищ 694
Создание контроллера и представлений 696
Конфигурирование приложения 699
Понятие компонентов представлений 700
Создание компонента представления 701
Создание компонентов представлений POCO 701
Наследование от базового класса ViewComponent 703
Понятие результатов компонентов представлений 704
Получение данных контекста 710
Создание асинхронных компонентов представлений 715
Создание гибридных классов контроллеров и компонентов представлений 718
Создание гибридных представлений 719
Применение гибридного класса 720
Резюме 722
Глава 23. Вспомогательные функции дескрипторов 723
Подготовка проекта для примера 724
Создание модели и хранилища 725
Создание контроллера, компоновки и представлений 725
Конфигурирование приложения 728
Создание вспомогательной функции дескриптора 729
Определение класса вспомогательной функции дескриптора 729
Регистрация вспомогательных функций дескрипторов 733
Использование вспомогательной функции дескриптора 734
Управление областью действия вспомогательной функции дескриптора 736
Содержание 15
Усовершенствованные возможности вспомогательных функций дескрипторов 740
Создание сокращающих элементов 741
Вставка перед и после содержимого и элементов 743
Получение данных контекста представления и использование внедрения
зависимостей 747
Работа с моделью представления 749
Согласование вспомогательных функций дескрипторов 751
Подавление выходного элемента 753
Резюме 754
Глава 24. Использование вспомогательных функций дескрипторов для форм 755
Подготовка проекта для примера 756
Переустановка представлений и компоновки 757
Работа с элементами form 759
Установка цели формы 759
Использование средства противодействия подделке 760
Работа с элементами input 762
Конфигурирование элементов input 763
Форматирование значений данных 765
Работа с элементами label 768
Работа с элементами select и option 770
Использование источника данных для заполнения элемента select 771
Генерирование элементов option из перечисления 772
Работа с элементами textarea 776
Вспомогательные функции дескрипторов для проверки достоверности форм 778
Резюме 778
Глава 25. Использование других встроенных вспомогательных
функций дескрипторов 779
Подготовка проекта для примера 780
Использование вспомогательной функции дескриптора для среды размещения 781
Использование вспомогательных функций дескрипторов для JavaScript и CSS 782
Управление файлами JavaScript 782
Управление таблицами стилей CSS 792
Работа с якорными элементами 795
Работа с элементами img 797
Использование кеша данных 798
Установка времени истечения для кеша 801
Использование вариаций кеша 803
Использование URL, относительных к приложению 805
Резюме 808
Глава 26. Привязка моделей 809
Подготовка проекта для примера 810
Создание модели и хранилища 810
Создание контроллера и представления 812
Конфигурирование приложения 813
Понятие привязки моделей 814
Стандартные значения привязки 816
Привязка простых типов 818
16 Содержание
Привязка сложных типов 819
Привязка массивов и коллекций 829
Привязка коллекций сложных типов 832
Указание источника данных привязки моделей 835
Выбор стандартного источника данных привязки 837
Использование заголовков в качестве источников данных привязки 838
Использование тел запросов в качестве источников данных привязки 841
Резюме 843
Глава 27. Проверка достоверности моделей 844
Подготовка проекта для примера 844
Создание модели 846
Создание контроллера 846
Создание компоновки и представлений 847
Необходимость в проверке достоверности модели 850
Явная проверка достоверности модели 850
Отображение пользователю ошибок проверки достоверности 853
Отображение сообщений об ошибках проверки достоверности 855
Отображение сообщений об ошибках проверки достоверности на уровне свойств 860
Отображение сообщений об ошибках проверки достоверности на уровне модели 861
Указание правил проверки достоверности с помощью метаданных 864
Создание специального атрибута проверки достоверности для свойства 867
Выполнение проверки достоверности на стороне клиента 870
Выполнение удаленной проверки достоверности 873
Резюме 876
Глава 28. Введение в ASP.NET Core Identity 877
Подготовка проекта для примера 879
Создание контроллера и представления 880
Настройка ASP.NET Core Identity 882
Создание класса пользователя 882
Создание класса контекста базы данных 883
Конфигурирование настройки строки подключения к базе данных 884
Создание базы данных Identity 886
Использование ASP.NET Core Identity 886
Перечисление пользовательских учетных записей 887
Создание пользователей 889
Проверка паролей 893
Проверка деталей, связанных с пользователем 900
Завершение построения средств администрирования 905
Реализация возможности удаления 906
Реализация возможности редактирования 907
Резюме 912
Глава 29. Применение ASP.NET Core Identity 913
Подготовка проекта для примера 913
Аутентификация пользователей 914
Подготовка к реализации аутентификации 916
Добавление аутентификации пользователей 919
Тестирование аутентификации 922
Содержание 17
Авторизация пользователей с помощью ролей 922
Создание и удаление ролей 923
Управление членством в ролях 928
Использование ролей для авторизации 933
Помещение в базу данных начальной информации 937
Резюме 940
Глава 30. Расширенные средства ASP.NET Core Identity 941
Подготовка проекта для примера 942
Добавление специальных свойств в класс пользователя 942
Подготовка миграции базы данных 946
Тестирование специальных свойств 947
Работа с заявками и политиками 947
Понятие заявок 948
Создание заявок 952
Использование политик 955
Использование политик для авторизации доступа к ресурсам 962
Использование сторонней аутентификации 967
Регистрация приложения в Google 967
Включение аутентификации Google 968
Резюме 972
Глава 31. Соглашения по модели и ограничения действий 973
Подготовка проекта для примера 973
Создание модели представления, контроллера и представления 974
Использование модели приложения и соглашений по модели 976
Модель приложения 977
Роль соглашений по модели 981
Создание соглашения по модели 982
Порядок применения соглашений по модели 987
Создание глобальных соглашений по модели 988
Использование ограничений действий 989
Подготовка проекта для примера 990
Ограничения действий 992
Создание ограничения действия 993
Распознавание зависимостей в ограничениях действий 998
Резюме 1000
Предметный указатель 1001