Опубликовано

Новинка: “C# 11 и .NET 7.0”

C# 11 и .NET 7.0

Книга о разработке нативных, кросc-платформенных и веб-приложений на платформе .NET с использованием языка C#. Подробно рассмотрена экосистема платформы .NET, средства связи в распределённых системах (gRPC и SignalR), инструменты современной веб-разработки – Blazor, библиотека машинного обучения ML.NET, фреймворк для веб-разработки ASP.NET Core, инструментарий Entity Framework Core 7. Объяснены возможности подготовки микросервисной архитектуры, а также развёртывание контейнеров и управление ими с применением Docker Swarm и Kubernetes.

Для разработчиков

Создаём кросс-платформенные приложения на базе .NET Core

Платформа .NET – это развитая среда, в которой можно разрабатывать и выполнять приложения любых типов. Хотя официально на платформе .NET поддерживается несколько языков программирования, наиболее популярен среди них именно язык C#, и его можно считать флагманским.

В этой книге разобраны основы .NET, пошагово объяснено, как создавать нативные приложения, которые легко адаптировать для работы на многих платформах. Уделено внимание взаимодействию с базами данных и работе с Entity Framework Core 7. Рассматривается ASP.NET Core, главный фреймворк .NET, предназначенный для веб-разработки.

Обсуждаются и более современные веб-технологии, в частности Blazor (технология на основе WebAssembly, специально предназначенная для платформы .NET), а также настройка двунаправленной коммуникации с использованием SignalR и gRPC. В последней части книги описано развёртывание и контейнеризация приложения с применением Docker Swarm и Kubernetes.

Прочитав книгу, вы научитесь уверенно создавать  приложения на языке C# для платформы .NET.

В этой книге

    • Знакомство с новейшими возможностями языка C#
    • Работа с новыми возможностями .NET 7, в том числе, SDK и библиотеками
    • Создание веб-приложений с применением ASP.NET Core 7
    • Подготовка моделей машинного обучения с использованием ML.NET
    • Приёмы, позволяющие быстро и безопасно собирать и развёртывать распределённые приложения

Для кого эта книга
Книга рассчитана на широкую аудиторию разработчиков: для тех, кто хочет изучить язык C# и платформу .NET в их современной редакции, для желающих освоить веб-разработку на платформе .NET и для тех, кому требуется разрабатывать нативные и кросс-платформенные приложения с применением C# и .NET.

Книгу “C# 11 и .NET 7.0” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе……………………………………………………………………………………………….. 15

О рецензентах………………………………………………………………………………………… 16

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

Предисловие…………………………………………………………………………………………… 18

Комплект исходного кода и цветные иллюстрации……………………………………………………………….. 22

Глава 1. Знакомство со структурой приложений .NET 7………………………… 23

Введение……………………………………………………………………………………………………………………………………… 23

Структура…………………………………………………………………………………………………………………………………… 24

Цели…………………………………………………………………………………………………………………………………………….. 24

Настройка среды разработки…………………………………………………………………………………………………… 24

Компьютеры, подходящие для разработки ПО……………………………………………………………….. 24

.NET 7 SDK………………………………………………………………………………………………………………………….. 24

Установка редактора кода или среды IDE………………………………………………………………………. 25

Установка подходящего редактора кода……………………………………………………………….. 26

Установка подходящей IDE…………………………………………………………………………………….. 28

Microsoft Visual Studio 2022………………………………………………………………………………………………. 28

Microsoft Visual Studio 2022 for Mac……………………………………………………………………….. 29

JetBrains Rider……………………………………………………………………………………………………………………… 30

Создание приложения .NET 7…………………………………………………………………………………………………… 31

Создание приложения с помощью CLI…………………………………………………………………………….. 32

Создание приложения с помощью графического интерфейса IDE……………………………….. 33

Обзор структуры проекта .NET 7……………………………………………………………………………………………… 35

Добавление объекта struct………………………………………………………………………………………………… 35

Добавление интерфейса и класса…………………………………………………………………………………….. 36

Изменение точки входа в приложение……………………………………………………………………………… 39

Основы C# 11 и встроенные типы данных………………………………………………………………………………. 41

Встроенные типы данных…………………………………………………………………………………………………. 41

Поток управления………………………………………………………………………………………………………………. 43

Пользовательские типы в C#…………………………………………………………………………………………….. 44

Модификаторы доступа……………………………………………………………………………………………………. 44

Заключение………………………………………………………………………………………………………………………………… 45

Что следует помнить………………………………………………………………………………………………………………….. 46

Контрольные вопросы………………………………………………………………………………………………………………. 46

Ответы…………………………………………………………………………………………………………………………………. 47

Основные термины…………………………………………………………………………………………………………………….. 47

Глава 2. Обзор возможностей C# 11……………………………………………………….. 48

Введение……………………………………………………………………………………………………………………………………… 48

Структура…………………………………………………………………………………………………………………………………… 48

Цели…………………………………………………………………………………………………………………………………………….. 48

Предварительные условия………………………………………………………………………………………………………… 49

Автоматическая инициализация структур………………………………………………………………………………. 49

Обобщенные атрибуты……………………………………………………………………………………………………………… 50

Пример обобщенного атрибута………………………………………………………………………………………… 51

Сопоставление последовательности с образцом……………………………………………………………………. 53

Демонстрация сопоставления последовательности с образцом…………………………………… 54

Сопоставление последовательности с образцом типа char span………………………………….. 54

Новые операции со строками…………………………………………………………………………………………………… 56

Заключение………………………………………………………………………………………………………………………………… 59

Что следует помнить………………………………………………………………………………………………………………….. 60

Контрольные вопросы………………………………………………………………………………………………………………. 60

Ответы…………………………………………………………………………………………………………………………………. 61

Основные термины…………………………………………………………………………………………………………………….. 61

Глава 3. Что нового в .NET 7?………………………………………………………………… 62

Введение……………………………………………………………………………………………………………………………………… 62

Структура…………………………………………………………………………………………………………………………………… 62

Цели…………………………………………………………………………………………………………………………………………….. 62

Предварительные условия………………………………………………………………………………………………………… 63

Улучшения в SDK и инструментах сборки………………………………………………………………………………. 63

Улучшения инструментов командной строки…………………………………………………………………. 63

NativeAOT и функция обрезки библиотек………………………………………………………………………… 64

Центральный диспетчер пакетов……………………………………………………………………………………… 65

Обновления библиотек System и Microsoft……………………………………………………………………………… 66

Поддержка микросекунд и наносекунд……………………………………………………………………………. 66

Новые возможности для работы с JSON………………………………………………………………………….. 68

Свойство MaxDepth класса JsonWriterOptions………………………………………………………. 69

Конфигурация JsonSerializerOptions по умолчанию…………………………………………….. 70

Вызовы HTTP PATCH для JSON……………………………………………………………………………….. 70

Полиморфизм JSON…………………………………………………………………………………………………… 71

Тестирование возможностей JSON………………………………………………………………………….. 73

Новые возможности класса Stream…………………………………………………………………………………… 73

Улучшения RegEx………………………………………………………………………………………………………………. 75

Улучшения в криптографии………………………………………………………………………………………………. 76

Новый TAR API………………………………………………………………………………………………………………….. 78

Улучшения наблюдаемости……………………………………………………………………………………………………… 80

Новые способы мониторинга действий……………………………………………………………………………. 80

Мониторинг остановленных действий……………………………………………………………………. 80

Событие изменения текущего действия………………………………………………………………….. 81

Перечисление свойств действия………………………………………………………………………………. 81

Показатель UpDownCounter……………………………………………………………………………………………… 83

Критические изменения в .NET 7………………………………………………………………………………………………. 83

Допустимость неопределенных значений в пространстве имен Microsoft.Extensions… 83

Конечные точки: устаревшие и не допускающие неопределенных значений……………… 84

Ограничение PatternContext……………………………………………………………………………………………… 84

Многоуровневый поиск в Windows отключен…………………………………………………………………. 84

Сериализация пользовательских типов в MSBuild…………………………………………………………. 84

Заключение………………………………………………………………………………………………………………………………… 85

Что следует помнить………………………………………………………………………………………………………………….. 85

Контрольные вопросы………………………………………………………………………………………………………………. 86

Ответы…………………………………………………………………………………………………………………………………. 86

Основные термины…………………………………………………………………………………………………………………….. 87

Глава 4. MAUI и кросс-платформенные нативные приложения…………….. 88

Введение……………………………………………………………………………………………………………………………………… 88

Структура…………………………………………………………………………………………………………………………………… 88

Цели…………………………………………………………………………………………………………………………………………….. 89

Предварительные условия………………………………………………………………………………………………………… 89

Общие сведения о MAUI……………………………………………………………………………………………………………. 89

Включение среды разработки MAUI……………………………………………………………………………….. 90

Создание простых MAUI-приложений…………………………………………………………………………….. 91

Справочные данные по MAUI XAML…………………………………………………………………….. 94

Работа с Blazor на платформе .NET MAUI………………………………………………………………………. 97

Архитектурные паттерны MAUI………………………………………………………………………………………. 99

Model-View-ViewModel……………………………………………………………………………………………… 99

Паттерны, поддерживаемые MAUI через сторонние платформы……………………………….. 101

ReactiveUI………………………………………………………………………………………………………………… 101

Model-View-Update………………………………………………………………………………………………….. 101

Использование MAUI для создания настольных приложений……………………………………………. 102

Подготовка среды разработки настольных приложений…………………………………………….. 102

Запуск настольного приложения в режиме отладки…………………………………………………….. 102

Публикация настольного приложения…………………………………………………………………………… 103

Использование MAUI для создания мобильных приложений…………………………………………….. 104

Подготовка среды разработки мобильных приложений……………………………………………… 105

Запуск мобильного приложения на эмуляторе……………………………………………………………… 106

Публикация мобильного приложения……………………………………………………………………………. 106

Ограничения разработки для Mac OS и iOS………………………………………………………………………….. 107

Дополнительные инструменты, необходимые для публикации приложений
для iOS……………………………………………………………………………………………………………………………….. 107

Менее строгие требования к приложениям для Mac OS………………………………………………. 108

Заключение………………………………………………………………………………………………………………………………. 108

Что следует помнить……………………………………………………………………………………………………………….. 109

Контрольные вопросы…………………………………………………………………………………………………………….. 109

Ответы……………………………………………………………………………………………………………………………….. 110

Основные термины…………………………………………………………………………………………………………………… 110

Глава 5. Доступ к базам данных с помощью Entity Framework 7………….. 111

Введение…………………………………………………………………………………………………………………………………… 111

Структура…………………………………………………………………………………………………………………………………. 111

Цели…………………………………………………………………………………………………………………………………………… 112

Предварительные условия………………………………………………………………………………………………………. 112

Знакомство с основами реляционных БД……………………………………………………………………………… 112

Обзор систем управления реляционными БД и SQL…………………………………………………….. 112

Таблицы, отношения и нормализация……………………………………………………………………………. 113

Введение первичных ключей…………………………………………………………………………………. 115

Нормализация и отношения внешних ключей……………………………………………………… 115

Введение в Entity Framework 7……………………………………………………………………………………………….. 117

Подход “сначала код” в EF7…………………………………………………………………………………………………… 119

Добавление кода Entity Framework………………………………………………………………………………… 119

Добавление объектов-сущностей…………………………………………………………………………………… 120

Добавление контекста базы данных………………………………………………………………………………. 122

Добавление скрипта создания базы данных…………………………………………………………………. 124

Создание базы данных путем запуска приложения……………………………………………………… 128

Подход “сначала база данных” в EF7……………………………………………………………………………………. 129

Создание моделей EF7 из существующей БД……………………………………………………………….. 129

Просмотр автоматически сгенерированного кода……………………………………………………….. 130

Новейшие функции EF7…………………………………………………………………………………………………………… 131

Подход “сначала база данных” и управление с помощью шаблонов T4…………………… 131

Защищенный ключ…………………………………………………………………………………………………………… 131

Отображение “одна таблица на конкретный тип” (TPC)……………………………………………… 133

Перехватчики……………………………………………………………………………………………………………………. 136

Заключение………………………………………………………………………………………………………………………………. 137

Что следует помнить……………………………………………………………………………………………………………….. 137

Контрольные вопросы…………………………………………………………………………………………………………….. 138

Ответы……………………………………………………………………………………………………………………………….. 139

Основные термины…………………………………………………………………………………………………………………… 139

Глава 6. Типы веб-приложений в .NET………………………………………………… 140

Введение…………………………………………………………………………………………………………………………………… 140

Структура…………………………………………………………………………………………………………………………………. 140

Цели…………………………………………………………………………………………………………………………………………… 141

Предварительные условия………………………………………………………………………………………………………. 141

Основы ASP.NET Core……………………………………………………………………………………………………………… 141

Структура базового приложения ASP.NET Core…………………………………………………………… 141

Web API в ASP.NET Core…………………………………………………………………………………………………………. 144

Web API с контроллерами……………………………………………………………………………………………….. 144

Конечные точки Minimal API………………………………………………………………………………………….. 149

Добавление метаданных Open API……………………………………………………………………….. 150

Улучшение передачи параметров в Minimal API………………………………………………… 150

Minimal API и типизированные результаты…………………………………………………………. 151

Выгрузка файлов в Minimal API…………………………………………………………………………….. 153

Новое в промежуточном ПО для обработки запросов…………………………………………………. 153

MVC в ASP.NET Core……………………………………………………………………………………………………………….. 155

Razor Pages в ASP.NET Core……………………………………………………………………………………………………. 167

Заключение………………………………………………………………………………………………………………………………. 169

Что следует помнить……………………………………………………………………………………………………………….. 170

Контрольные вопросы…………………………………………………………………………………………………………….. 170

Ответы……………………………………………………………………………………………………………………………….. 171

Основные термины…………………………………………………………………………………………………………………… 171

Глава 7. Blazor и WebAssembly в .NET………………………………………………….. 172

Введение…………………………………………………………………………………………………………………………………… 172

Структура…………………………………………………………………………………………………………………………………. 173

Цели…………………………………………………………………………………………………………………………………………… 173

Предварительные условия………………………………………………………………………………………………………. 173

Общие сведения о Blazor…………………………………………………………………………………………………………. 173

Примеры Razor-компонентов………………………………………………………………………………………….. 174

@page……………………………………………………………………………………………………………………….. 175

@onclick…………………………………………………………………………………………………………………… 175

@code……………………………………………………………………………………………………………………….. 175

Ключевые слова Razor в Razor-компонентах……………………………………………………………….. 175

@using………………………………………………………………………………………………………………………. 176

@implements……………………………………………………………………………………………………………. 176

@inherits…………………………………………………………………………………………………………………… 176

@inject……………………………………………………………………………………………………………………… 176

@layout…………………………………………………………………………………………………………………….. 176

@namespace…………………………………………………………………………………………………………….. 176

@preservewhitespace……………………………………………………………………………………………….. 177

@attributes……………………………………………………………………………………………………………….. 177

@bind……………………………………………………………………………………………………………………….. 177

@ref………………………………………………………………………………………………………………………….. 177

@typeparam…………………………………………………………………………………………………………….. 178

Обзор Blazor WebAssembly……………………………………………………………………………………………………… 178

Отделение кода программной части………………………………………………………………………………. 179

Взаимодействие с JavaScript…………………………………………………………………………………………… 181

Передача параметров в Razor-компоненты…………………………………………………………………… 182

Предварительная компиляция………………………………………………………………………………………… 183

Пустой шаблон Blazor WebAssembly……………………………………………………………………………… 184

Хостинг приложений Blazor WebAssembly в ASP.NET Core………………………………………………… 185

Добавление хостируемого приложения Blazor WebAssembly к существующему приложению ASP.NET Core       185

Проверка форм в Blazor…………………………………………………………………………………………………… 186

NavigationManager и передача состояния между страницами……………………………………. 188

Настройка Blazor Server………………………………………………………………………………………………………….. 189

Пользовательские элементы в Blazor……………………………………………………………………………… 190

Жизненный цикл Razor-компонента………………………………………………………………………………. 191

Пустой шаблон Blazor Server………………………………………………………………………………………….. 192

Заключение………………………………………………………………………………………………………………………………. 193

Что следует помнить……………………………………………………………………………………………………………….. 193

Контрольные вопросы…………………………………………………………………………………………………………….. 194

Ответы……………………………………………………………………………………………………………………………….. 194

Основные термины…………………………………………………………………………………………………………………… 195

Глава 8. SignalR и двусторонняя связь………………………………………………….. 196

Введение…………………………………………………………………………………………………………………………………… 196

Структура…………………………………………………………………………………………………………………………………. 197

Цели…………………………………………………………………………………………………………………………………………… 197

Предварительные условия………………………………………………………………………………………………………. 197

Общие сведения о библиотеке SignalR…………………………………………………………………………………… 197

WebSocket…………………………………………………………………………………………………………………………. 198

Server-Sent Events……………………………………………………………………………………………………………… 198

Длительный опрос……………………………………………………………………………………………………………. 199

Создание хаба SignalR на сервере…………………………………………………………………………………………. 199

Строго типизированный хаб…………………………………………………………………………………………… 202

Внедрение зависимостей в хаб SignalR………………………………………………………………………….. 203

JSON и MessagePack…………………………………………………………………………………………………………. 204

JavaScript-клиент для SignalR…………………………………………………………………………………………………. 204

Добавление HTML-разметки для клиента SignalR……………………………………………………….. 205

Применение функций SignalR в JavaScript……………………………………………………………………… 208

.NET-клиент для SignalR………………………………………………………………………………………………………….. 211

Заключение………………………………………………………………………………………………………………………………. 214

Что следует помнить……………………………………………………………………………………………………………….. 214

Контрольные вопросы…………………………………………………………………………………………………………….. 214

Ответы……………………………………………………………………………………………………………………………….. 215

Основные термины…………………………………………………………………………………………………………………… 215

Глава 9. gRPC в ASP.NET Core…………………………………………………………….. 216

Введение…………………………………………………………………………………………………………………………………… 216

Структура…………………………………………………………………………………………………………………………………. 216

Цели…………………………………………………………………………………………………………………………………………… 217

Предварительные условия………………………………………………………………………………………………………. 217

Общие сведения о технологии gRPC………………………………………………………………………………. 217

Protobuf как основной протокол сериализации сообщений………………………………………………… 218

Настройка сервера gRPC………………………………………………………………………………………………………… 218

Структура проекта ASP.NET Core gRPC………………………………………………………………………… 219

Типы вызовов и типы данных gRPC……………………………………………………………………………….. 221

JSON-перекодирование в gRPC……………………………………………………………………………………….. 224

Настройка клиента gRPC………………………………………………………………………………………………………… 227

Использование фабрики клиентов gRPC и внедрение зависимостей…………………………… 230

Обзор типов данных gRPC………………………………………………………………………………………………………. 232

Перечисления Protobuf…………………………………………………………………………………………………….. 233

Использование коллекций с помощью ключевого слова repeated………………………………. 234

Функциональность словаря в Protobuf…………………………………………………………………………… 234

Использование ключевого слова oneof в Protobuf………………………………………………………… 234

Общеизвестные типы данных…………………………………………………………………………………………………. 235

Заключение………………………………………………………………………………………………………………………………. 236

Что следует помнить……………………………………………………………………………………………………………….. 237

Контрольные вопросы…………………………………………………………………………………………………………….. 237

Ответы……………………………………………………………………………………………………………………………….. 238

Основные термины…………………………………………………………………………………………………………………… 238

Глава 10. Машинное обучение с помощью ML.NET…………………………….. 239

Введение…………………………………………………………………………………………………………………………………… 239

Структура…………………………………………………………………………………………………………………………………. 240

Цели…………………………………………………………………………………………………………………………………………… 240

Предварительные условия………………………………………………………………………………………………………. 240

Основы ML.NET……………………………………………………………………………………………………………………….. 240

Типы машинного обучения……………………………………………………………………………………………… 242

Обучение с учителем………………………………………………………………………………………………. 242

Обучение без учителя…………………………………………………………………………………………….. 242

Обучение с подкреплением……………………………………………………………………………………. 242

Начало работы с ML.NET………………………………………………………………………………………………. 243

Установка инструментов ML.NET………………………………………………………………………… 243

Использование ML.NET для создания первой модели МО…………………………………. 244

Выбор задачи для МО…………………………………………………………………………………………………………….. 246

Бинарная классификация………………………………………………………………………………………………… 246

Многоклассовая классификация…………………………………………………………………………………….. 248

Регрессия…………………………………………………………………………………………………………………………… 249

Рекомендации…………………………………………………………………………………………………………………… 250

Прогнозирование……………………………………………………………………………………………………………… 251

Классификация изображений…………………………………………………………………………………………. 253

Кластеризация………………………………………………………………………………………………………………….. 254

Обнаружение отклонений……………………………………………………………………………………………….. 254

Ранжирование…………………………………………………………………………………………………………………… 255

Обучение и оценка модели……………………………………………………………………………………………………… 255

Показатели бинарной классификации…………………………………………………………………………… 256

Показатели многоклассовой классификации………………………………………………………………… 256

Классификация изображений…………………………………………………………………………………………. 256

Прогнозирование……………………………………………………………………………………………………………… 257

Регрессия и рекомендации………………………………………………………………………………………………. 257

Показатели кластеризации……………………………………………………………………………………………… 257

Показатели обнаружения отклонений…………………………………………………………………………… 258

Показатели ранжирования……………………………………………………………………………………………… 258

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

Заключение………………………………………………………………………………………………………………………………. 261

Что следует помнить……………………………………………………………………………………………………………….. 262

Контрольные вопросы…………………………………………………………………………………………………………….. 262

Ответы……………………………………………………………………………………………………………………………….. 263

Основные термины…………………………………………………………………………………………………………………… 263

Глава 11. Микросервисы и контейнеризация в .NET 7…………………………. 265

Введение…………………………………………………………………………………………………………………………………… 265

Структура…………………………………………………………………………………………………………………………………. 266

Цели…………………………………………………………………………………………………………………………………………… 266

Предварительные условия………………………………………………………………………………………………………. 266

Контейнеры Docker………………………………………………………………………………………………………………….. 266

Контейнеры и образы контейнеров………………………………………………………………………………… 267

Базовые образы и уровни………………………………………………………………………………………………… 267

Изоляция сети и сопоставление портов…………………………………………………………………………. 268

Изоляция файловой системы и монтирование каталогов хоста………………………………….. 268

Установка Docker в Linux………………………………………………………………………………………………… 269

Установка Docker на Mac……………………………………………………………………………………………….. 269

Установка Docker в Windows…………………………………………………………………………………………… 269

Базовый образ Docker для .NET 7…………………………………………………………………………………………… 270

Создание приложения с поддержкой Docker…………………………………………………………………. 271

Добавление поддержки Docker в существующее приложение…………………………………….. 272

Структура файла Dockerfile……………………………………………………………………………………………. 273

Создание и запуск контейнера Docker…………………………………………………………………………… 275

Оркестрация приложений с помощью Docker Swarm…………………………………………………………… 275

Базовая оркестрация помощью Docker Compose………………………………………………………….. 276

Запуск Docker Swarm……………………………………………………………………………………………………….. 278

Оркестрация приложений с помощью Kubernetes………………………………………………………………… 279

Установка Kubernetes в Linux…………………………………………………………………………………………. 279

Установка Kubernetes на Mac…………………………………………………………………………………………. 280

Добавление сервисов в кластер Kubernetes…………………………………………………………………… 281

Заключение………………………………………………………………………………………………………………………………. 282

Что следует помнить……………………………………………………………………………………………………………….. 282

Контрольные вопросы…………………………………………………………………………………………………………….. 282

Ответы……………………………………………………………………………………………………………………………….. 283

Основные термины…………………………………………………………………………………………………………………… 283

Предметный указатель…………………………………………………………………………. 285

Федор Сазанцев

Сазанавец Фёдор (Sazanavets Fiodar) — профессиональный инженер-программист, который широко использует программное обеспечение компании Microsoft. Основные области его специализации включают ASP.NET (Framework и Core), SQL Server, Azure, Docker, Интернет вещей (IoT), архитектуру микросервисов и различные интерфейсные технологии. Фёдор имеет большой практический опыт разработки программного обеспечения в различных отраслях, включая гидротехнику, финансы, розничную торговлю, железную дорогу и оборону. С энтузиазмом обучает других людей навыкам программирования. Автор ряда книг и курсов по программированию.

Опубликовано

Долгожданная “Библия C#. 6-е издание”

Библия C#. 6-е издание

Книга посвящена программированию на языке C#  для платформы Microsoft .NET, начиная с основ языка и разработки программ для работы в режиме командной строки и заканчивая созданием современных веб-приложений. Материал сопровождается большим количеством практических примеров. Подробно описывается логика выполнения каждого участка программы. Уделено внимание вопросам повторного использования кода. В 6-м издании примеры переписаны с учетом современной платформы .NET 7, большой упор сделан на веб–приложения и фреймворк доступа к данным  Entity Framework. На сайте издательства находятся коды программ, дополнительная справочная информация и копия базы данных для выполнения примеров из книги.

Для программистов

Программирование может быть доступно каждому!

Книга будет полезна всем, кто хочет научиться писать программы для платформы Microsoft .NET на современном и удобном языке программирования C#. Большое количество практических примеров, легкость изложения материала и интересные комментарии призваны сделать обучение занимательным и нескучным, а подробное описание логики выполнения каждого участка кода поможет читателю использовать полученные знания при разработке собственных приложений.
Дополнительным источником знаний в процессе дальнейшего обучения служит электронный архив к книге, содержащий коды программ, дополнительную справочную информацию и копию базы данных для выполнения примеров из книги.

  • Программирование для .NET на C#
  • Платформа .NET
  • Базы данных
  • Веб-программирование
  • Сетевое программирование
  • Повторное использование кода
  • Изучение языка на полезных примерах

…Невозможно научить программировать с помощью одной книги, но я попытаюсь заинтересовать вас этим великолепным миром. На сайте издательства выложено множество дополнительных материалов, которые пригодятся вам в самостоятельном изучении. Книга дает основную и необходимую информацию, чтобы вы сразу после ее прочтения смогли приступить к написанию своих собственных приложений …
Михаил Фленов

Книгу “Библия C#. 6-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 9

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

Бонус……………………………………………………………………………………………………… 15

Структура книги……………………………………………………………………………………. 17

Глава 1. Введение в .NET……………………………………………………………………….. 19

1.1. Платформа .NET………………………………………………………………………………………………………………….. 19

1.1.1. «Кубики» .NET…………………………………………………………………………………………………………… 20

1.1.2. Сборки……………………………………………………………………………………………………………………….. 21

1.2. Обзор среды разработки Visual Studio .NET…………………………………………………………………….. 23

1.2.1. Работа с проектами и решениями……………………………………………………………………………. 23

1.2.2. Работа с файлами……………………………………………………………………………………………………… 31

1.3. Простейший пример .NET-приложения…………………………………………………………………………….. 31

1.3.1. Проект на языке C#…………………………………………………………………………………………………… 31

1.3.2. Компиляция и запуск проекта на языке C#…………………………………………………………….. 32

1.4. Компиляция приложений……………………………………………………………………………………………………. 34

1.4.1. Компиляция в .NET Framework………………………………………………………………………………… 34

1.4.2. Компиляция в .NET Core или .NET 5 и старше……………………………………………………….. 35

1.5. Поставка сборок………………………………………………………………………………………………………………….. 37

1.6. Формат исполняемого файла .NET……………………………………………………………………………………. 40

1.7. Код верхнего уровня…………………………………………………………………………………………………………… 41

Глава 2. Основы C#……………………………………………………………………………….. 42

2.1. Комментарии……………………………………………………………………………………………………………………….. 42

2.2. Переменная………………………………………………………………………………………………………………………….. 43

2.3. Именование элементов кода………………………………………………………………………………………………. 46

2.4. Работа с переменными……………………………………………………………………………………………………….. 49

2.4.1. Строки и символы…………………………………………………………………………………………………….. 52

2.4.2. Массивы…………………………………………………………………………………………………………………….. 55

2.4.3. Перечисления……………………………………………………………………………………………………………. 58

2.5. Простейшая математика…………………………………………………………………………………………………….. 61

2.6. Условные операторы………………………………………………………………………………………………………….. 66

2.6.1. Условный оператор if………………………………………………………………………………………………. 66

2.6.2. Условный оператор switch………………………………………………………………………………………. 69

2.6.3. Сокращенная проверка……………………………………………………………………………………………. 70

2.7. Циклы…………………………………………………………………………………………………………………………………… 71

2.7.1. Цикл for……………………………………………………………………………………………………………………… 71

2.7.2. Цикл while………………………………………………………………………………………………………………….. 74

2.7.3. Цикл do…while…………………………………………………………………………………………………………… 75

2.7.4. Цикл foreach………………………………………………………………………………………………………………. 76

2.8. Управление циклом…………………………………………………………………………………………………………….. 77

2.8.1. Оператор break…………………………………………………………………………………………………………. 77

2.8.2. Оператор continue…………………………………………………………………………………………………….. 78

2.9. Константы……………………………………………………………………………………………………………………………. 79

2.10. Нулевые значения…………………………………………………………………………………………………………….. 80

2.11. Начальные значения переменных…………………………………………………………………………………… 80

2.12. Системы счисления…………………………………………………………………………………………………………… 81

2.13. Логические операции……………………………………………………………………………………………………….. 84

Глава 3. Объектно-ориентированное программирование………………………. 86

3.1. Объекты на C#…………………………………………………………………………………………………………………….. 86

3.2. Свойства………………………………………………………………………………………………………………………………. 90

3.3. Методы………………………………………………………………………………………………………………………………… 96

3.3.1. Описание методов…………………………………………………………………………………………………….. 97

3.3.2. Параметры методов………………………………………………………………………………………………….. 99

3.3.3. Перегрузка методов………………………………………………………………………………………………… 107

3.3.4. Конструктор……………………………………………………………………………………………………………. 107

3.3.5. Статичность……………………………………………………………………………………………………………. 112

3.3.6. Рекурсия…………………………………………………………………………………………………………………… 115

3.3.7. Деструктор………………………………………………………………………………………………………………. 118

3.3.8. Упрощенный синтаксис…………………………………………………………………………………………. 119

3.4. Метод Main()……………………………………………………………………………………………………………………… 120

3.5. Оператор Using…………………………………………………………………………………………………………………. 122

3.6. Объекты только для чтения……………………………………………………………………………………………… 123

3.7. Объектно-ориентированное программирование……………………………………………………………. 124

3.7.1. Наследование…………………………………………………………………………………………………………. 124

3.7.2. Инкапсуляция………………………………………………………………………………………………………….. 128

3.7.3. Полиморфизм………………………………………………………………………………………………………….. 131

3.8. Наследование от класса Object……………………………………………………………………………………….. 133

3.9. Переопределение методов……………………………………………………………………………………………….. 134

3.10. Обращение к предку из класса………………………………………………………………………………………. 138

3.11. Вложенные классы…………………………………………………………………………………………………………. 140

3.12. Область видимости…………………………………………………………………………………………………………. 142

3.13. Ссылочные и простые типы данных…………………………………………………………………………….. 144

3.14. Проверка класса объекта……………………………………………………………………………………………….. 145

3.15. Неявный тип данных var………………………………………………………………………………………………… 146

3.16. Абстрактные классы………………………………………………………………………………………………………. 147

3.17. Инициализация свойств………………………………………………………………………………………………….. 150

3.18. Частицы класса……………………………………………………………………………………………………………….. 151

Глава 4. Консольные приложения………………………………………………………… 152

4.1. Украшение консоли………………………………………………………………………………………………………….. 153

4.2. Работа с буфером консоли……………………………………………………………………………………………….. 155

4.3. Окно консоли…………………………………………………………………………………………………………………….. 157

4.4. Запись в консоль……………………………………………………………………………………………………………….. 157

4.5. Чтение данных из консоли……………………………………………………………………………………………….. 160

Глава 5. Продвинутое программирование……………………………………………. 162

5.1. Приведение и преобразование типов………………………………………………………………………………. 162

5.2. Все в .NET — это объекты………………………………………………………………………………………………… 164

5.3. Работа с перечислениями Enum………………………………………………………………………………………. 166

5.3.1. Перечисления — это значения………………………………………………………………………………. 166

5.3.2. Перечисления-флаги………………………………………………………………………………………………. 169

5.4. Структуры…………………………………………………………………………………………………………………………. 172

5.5. Дата и время………………………………………………………………………………………………………………………. 177

5.6. Класс строк……………………………………………………………………………………………………………………….. 180

5.7. Перегрузка операторов…………………………………………………………………………………………………….. 183

5.7.1. Математические операторы………………………………………………………………………………….. 184

5.7.2. Операторы сравнения…………………………………………………………………………………………….. 186

5.7.3. Операторы преобразования………………………………………………………………………………….. 187

5.8. Шаблоны……………………………………………………………………………………………………………………………. 189

5.9. Анонимные типы……………………………………………………………………………………………………………….. 192

5.10. Кортежи…………………………………………………………………………………………………………………………… 194

5.11. Форматирование строк…………………………………………………………………………………………………… 195

5.12. Динамика…………………………………………………………………………………………………………………………. 196

Глава 6. Интерфейсы……………………………………………………………………………. 198

6.1. Объявление интерфейсов………………………………………………………………………………………………….. 199

6.2. Реализация интерфейсов………………………………………………………………………………………………….. 201

6.3. Использование реализации интерфейса…………………………………………………………………………. 202

6.4. Интерфейсы в качестве параметров………………………………………………………………………………… 205

6.5. Перегрузка интерфейсных методов…………………………………………………………………………………. 206

6.6. Наследование……………………………………………………………………………………………………………………. 208

6.7. Клонирование объектов…………………………………………………………………………………………………… 209

6.8. Реализация по умолчанию……………………………………………………………………………………………….. 210

Глава 7. Массивы, списки, коллекции и словари…………………………………. 213

7.1. Базовый класс для массивов……………………………………………………………………………………………. 213

7.2. Невыровненные массивы…………………………………………………………………………………………………. 215

7.3. Динамические массивы…………………………………………………………………………………………………….. 217

7.4. Индексаторы массива………………………………………………………………………………………………………. 220

7.5. Интерфейсы массивов………………………………………………………………………………………………………. 221

7.5.1. Интерфейс IEnumerable………………………………………………………………………………………….. 222

7.5.2. Интерфейсы IComparer и IComparable…………………………………………………………………. 225

7.6. Оператор yield…………………………………………………………………………………………………………………… 228

7.7. Стандартные списки…………………………………………………………………………………………………………. 229

7.7.1. Класс Queue…………………………………………………………………………………………………………….. 229

7.7.2. Класс Stack……………………………………………………………………………………………………………… 230

7.7.3. Класс Hashtable………………………………………………………………………………………………………. 231

7.8. Типизированные массивы………………………………………………………………………………………………… 233

7.9. Словарь……………………………………………………………………………………………………………………………… 236

Глава 8. Обработка исключительных ситуаций…………………………………… 238

8.1. Исключительные ситуации………………………………………………………………………………………………. 239

8.2. Исключения в C#……………………………………………………………………………………………………………….. 241

8.3. Оформление блоков try…………………………………………………………………………………………………….. 244

8.4. Ошибки в визуальных приложениях……………………………………………………………………………….. 245

8.5. Генерирование исключительных ситуаций……………………………………………………………………. 247

8.6. Иерархия классов исключений………………………………………………………………………………………… 248

8.7. Собственный класс исключения……………………………………………………………………………………… 249

8.8. Блок finally………………………………………………………………………………………………………………………… 252

8.9. Переполнение……………………………………………………………………………………………………………………. 253

8.10. Замечание о производительности…………………………………………………………………………………. 256

Глава 9. События…………………………………………………………………………………. 257

9.1. Делегаты……………………………………………………………………………………………………………………………. 257

9.2. События и их вызов…………………………………………………………………………………………………………… 258

9.3. Использование собственных делегатов………………………………………………………………………….. 261

9.4. Делегаты изнутри……………………………………………………………………………………………………………… 265

9.5. Анонимные методы…………………………………………………………………………………………………………… 267

Глава 10. LINQ…………………………………………………………………………………….. 268

10.1. LINQ при работе с массивами……………………………………………………………………………………….. 268

10.1.1. SQL-стиль использования LINQ………………………………………………………………………… 268

10.1.2. Использование LINQ через методы………………………………………………………………….. 271

10.2. Магия IEnumerable………………………………………………………………………………………………………….. 271

10.3. Доступ к данным…………………………………………………………………………………………………………….. 275

10.4. Использование LINQ для доступа к XML…………………………………………………………………….. 276

Глава 11. Хранение информации………………………………………………………….. 279

11.1. Файловая система…………………………………………………………………………………………………………… 279

11.2. Текстовые файлы…………………………………………………………………………………………………………….. 282

11.3. Бинарные файлы…………………………………………………………………………………………………………….. 285

11.4. XML-файлы……………………………………………………………………………………………………………………… 289

11.4.1. Создание XML-документов……………………………………………………………………………….. 289

11.4.2. Чтение XML-документов……………………………………………………………………………………. 293

11.5. Потоки Stream………………………………………………………………………………………………………………….. 296

11.6. Потоки MemoryStream…………………………………………………………………………………………………….. 297

11.7. Сериализация………………………………………………………………………………………………………………….. 299

11.7.1. Отключение сериализации………………………………………………………………………………… 302

11.7.2. Сериализация в XML…………………………………………………………………………………………. 304

11.7.3. Особенности сериализации……………………………………………………………………………….. 305

11.7.4. Управление сериализацией……………………………………………………………………………….. 307

Глава 12. Многопоточность………………………………………………………………….. 310

12.1. Класс Thread……………………………………………………………………………………………………………………. 311

12.2. Передача параметра в поток…………………………………………………………………………………………. 314

12.3. Конкурентный доступ…………………………………………………………………………………………………….. 316

12.4. Пул потоков…………………………………………………………………………………………………………………….. 318

12.5. Домены приложений .NET……………………………………………………………………………………………… 320

12.6. Ключевые слова async и await………………………………………………………………………………………. 323

12.7. Задачи или потоки — что выбрать?……………………………………………………………………………… 330

Глава 13. Добро пожаловать в веб-программирование…………………………. 332

13.1. Создание первого веб-приложения……………………………………………………………………………….. 332

13.2. Работа с конфигурацией сайта……………………………………………………………………………………… 339

13.3. Работа со статичными файлами……………………………………………………………………………………. 342

13.4. Модель – Представление – Контроллер………………………………………………………………………. 343

13.5. Маршрутизация………………………………………………………………………………………………………………. 345

13.6. Подробнее про контроллеры…………………………………………………………………………………………. 352

13.7. Представления………………………………………………………………………………………………………………… 355

13.8. Модель представления…………………………………………………………………………………………………… 359

13.9. Представления Razor……………………………………………………………………………………………………… 362

13.9.1. Комментарии………………………………………………………………………………………………………. 362

13.9.2. Вывод данных в представлениях……………………………………………………………………… 363

13.9.3. C#-код………………………………………………………………………………………………………………….. 364

13.9.4. Условные операторы…………………………………………………………………………………………. 365

13.9.5. Циклы…………………………………………………………………………………………………………………… 367

13.9.6. Исключительные ситуации……………………………………………………………………………….. 370

13.9.7. Ключевое слово using………………………………………………………………………………………… 370

13.10. Создание представлений……………………………………………………………………………………………… 372

13.10.1. Макеты………………………………………………………………………………………………………………. 372

13.10.2. Стартовый файл……………………………………………………………………………………………….. 376

13.10.3. Встраиваемые представления…………………………………………………………………………. 378

13.10.4. Компоненты………………………………………………………………………………………………………. 382

13.10.5. Секции……………………………………………………………………………………………………………….. 385

13.11. Работа с формами…………………………………………………………………………………………………………. 386

13.12. Проверка данных………………………………………………………………………………………………………….. 391

13.13. Работа с сессиями…………………………………………………………………………………………………………. 395

13.14. Cookie…………………………………………………………………………………………………………………………….. 397

13.15. Доступ к запросу…………………………………………………………………………………………………………… 399

Глава 14. Базы данных………………………………………………………………………… 401

14.1. Библиотека ADO.NET…………………………………………………………………………………………………….. 401

14.2. Строка подключения………………………………………………………………………………………………………. 403

14.3. Подключение к базе данных………………………………………………………………………………………….. 405

14.4. Инъекция зависимостей на примере подключений……………………………………………………… 408

14.5. Пул соединений………………………………………………………………………………………………………………. 412

14.6. Чтение данных из БД………………………………………………………………………………………………………. 413

14.7. Запросы с параметрами…………………………………………………………………………………………………. 417

14.8. Редактирование данных…………………………………………………………………………………………………. 420

14.9. Транзакции………………………………………………………………………………………………………………………. 421

14.10. Библиотека Dapper……………………………………………………………………………………………………….. 422

Глава 15. Entity Framework Core………………………………………………………….. 425

15.1. Создаем EF-приложение………………………………………………………………………………………………… 426

15.2. Код первичен…………………………………………………………………………………………………………………… 427

15.3. Контекст базы данных……………………………………………………………………………………………………. 429

15.4. Доступ к базе данных…………………………………………………………………………………………………….. 431

15.5. Миграции…………………………………………………………………………………………………………………………. 433

15.6. База данных первична……………………………………………………………………………………………………. 439

15.7. LINQ…………………………………………………………………………………………………………………………………. 441

15.8. Связи: один ко многим……………………………………………………………………………………………………. 442

15.9. Работа со связями……………………………………………………………………………………………………………. 444

15.10. Связи: многие ко многим………………………………………………………………………………………………. 446

15.11. Связи: один к одному……………………………………………………………………………………………………. 451

15.12. Журналы……………………………………………………………………………………………………………………….. 453

15.13. Как сохраняются данные?…………………………………………………………………………………………… 456

15.14. Погружение в запросы………………………………………………………………………………………………….. 459

15.15. Асинхронный доступ……………………………………………………………………………………………………. 468

15.16. Поиск по шаблону………………………………………………………………………………………………………… 469

15.17. Удаление данных………………………………………………………………………………………………………….. 470

15.18. Отслеживание изменений…………………………………………………………………………………………….. 471

15.19. Погружение в связи……………………………………………………………………………………………………….. 475

Глава 16. Повторное использование кода…………………………………………….. 481

16.1. Библиотеки………………………………………………………………………………………………………………………. 481

16.2. Создание библиотеки……………………………………………………………………………………………………… 482

16.3. Приватные сборки…………………………………………………………………………………………………………… 488

Глава 17. Сетевые сервисы…………………………………………………………………… 490

17.1. История……………………………………………………………………………………………………………………………. 490

17.2. Создаем WebAPI……………………………………………………………………………………………………………… 492

17.3. Теория Web API………………………………………………………………………………………………………………. 496

17.4. Сессии………………………………………………………………………………………………………………………………. 498

17.5. Полный цикл……………………………………………………………………………………………………………………. 500

Заключение………………………………………………………………………………………….. 503

Список литературы………………………………………………………………………………. 505

Приложение. Описание электронного архива, сопровождающего книгу 507

Предметный указатель…………………………………………………………………………. 509

 

Фленов Михаил

Флёнов Михаил, профессиональный программист. Работал в журнале «Хакер», в котором несколько лет вел рубрики «Hack-FAQ» и «Кодинг» для программистов, печатался в журналах «Игромания» и «Chip-Россия». Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.

Опубликовано

Новинка: “C# глазами хакера”

C# глазами хакера

Подробно рассмотрены  все аспекты безопасности от теории до реальных реализаций .NET-приложений на языке C#. Рассказано, как обеспечивать безопасную регистрацию, авторизацию и поддержку сессий пользователей. Перечислены уязвимости, которые могут быть присущи веб-сайтам и Web API, описано, как хакеры могут эксплуатировать уязвимости  и как можно обеспечить безопасность приложений. Даны основы оптимизации кода для обработки максимального количества пользователей с целью экономии ресурсов серверов и денег на хостинг. Рассмотрены сетевые функции: проверка соединения, отслеживание запроса, доступ к микросервисам, работа с сокетами и др. Приведены реальные примеры атак хакеров и способы защиты от них.

Для веб-программистов, администраторов и специалистов по безопасности

В течение 8 лет я работал над сайтами Sony с высокой нагрузкой и высокими требованиями по безопасности. За все это время сайты ни разу не были взломаны. Есть мнение, что безопасность – это сложно. Отчасти это верно. Но и сложное – возможно!
В этой книге я решил поделиться своим опытом работы над сайтами e-commerce с высокой нагрузкой, рассмотреть все аспекты безопасности от теории до реальных реализаций .NET-приложений на языке C# и рассказать, как обеспечить безопасность, оптимизировать код и обрабатывать высокие нагрузки с минимальными ресурсами.
Михаил Фленов, автор книги

Книгу “C# глазами хакера” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 7

Об авторе………………………………………………………………………………………………………………………………………. 7

О книге…………………………………………………………………………………………………………………………………………… 8

Благодарности……………………………………………………………………………………………………………………………… 8

Глава 1. Теория безопасности………………………………………………………………… 11

1.1. Комплексная защита…………………………………………………………………………………………………………… 12

1.2. Отказ в обслуживании………………………………………………………………………………………………………… 15

1.3. Управление кодом………………………………………………………………………………………………………………. 17

1.4. Стабильность кода: нулевые исключения………………………………………………………………………… 19

1.5. Исключительные ситуации………………………………………………………………………………………………… 21

1.6. Журналы ошибок и аудит………………………………………………………………………………………………….. 22

1.7. Ошибки нужно исправлять…………………………………………………………………………………………………. 24

1.8. Отгружаем легко и часто……………………………………………………………………………………………………. 28

1.8.1. Обновление базы данных…………………………………………………………………………………………….. 30

1.8.2. Копирование файлов…………………………………………………………………………………………………….. 31

1.8.3. Распределенное окружение………………………………………………………………………………………….. 32

1.9. Шифрование трафика…………………………………………………………………………………………………………. 33

1.10. POST или GET?………………………………………………………………………………………………………………….. 35

Глава 2. Безопасность .NET-приложений……………………………………………….. 39

2.1. Шаблон приложения…………………………………………………………………………………………………………… 39

2.2. Регистрация пользователей……………………………………………………………………………………………….. 41

2.3. Форма регистрации…………………………………………………………………………………………………………….. 43

2.3.1. Корректные данные регистрации………………………………………………………………………………… 44

2.3.2. Email с плюсом и точкой………………………………………………………………………………………………. 48

2.4. Хранение паролей………………………………………………………………………………………………………………. 49

2.4.1. Хеширование…………………………………………………………………………………………………………………. 51

2.4.2. MD5-хеширование………………………………………………………………………………………………………… 51

2.4.3. Безопасное хеширование……………………………………………………………………………………………… 54

2.5. Создание посетителей………………………………………………………………………………………………………… 55

2.6. Captcha………………………………………………………………………………………………………………………………… 56

2.6.1. Настраиваем Google reCAPTCHA……………………………………………………………………………….. 57

2.6.2. Пример использования reCAPTCHA……………………………………………………………………………. 59

2.6.3. Отменяем капчу…………………………………………………………………………………………………………….. 62

2.7. Авторизация………………………………………………………………………………………………………………………… 63

2.7.1. Базовая авторизация…………………………………………………………………………………………………….. 63

2.7.2. Журналирование и защита от перебора…………………………………………………………………….. 65

2.7.3. Защищаемся от перебора…………………………………………………………………………………………….. 66

2.8. Инъекция SQL: основы……………………………………………………………………………………………………….. 69

2.8.1. SQL-уязвимость в ADO.NET…………………………………………………………………………………………. 69

2.8.2. Защита от SQL-инъекции……………………………………………………………………………………………… 73

2.9. Dapper ORM…………………………………………………………………………………………………………………………. 75

2.10. Entity Framework……………………………………………………………………………………………………………….. 80

2.11. Отправка электронной почты………………………………………………………………………………………….. 84

2.11.1. Очереди сообщений……………………………………………………………………………………………………. 85

2.11.2. Работа с очередью………………………………………………………………………………………………………. 87

2.11.3. Отправляем письма…………………………………………………………………………………………………….. 88

2.12. Многоуровневая авторизация…………………………………………………………………………………………. 90

2.13. Запомни меня…………………………………………………………………………………………………………………….. 91

2.13.1. Зашифрованный якорь……………………………………………………………………………………………….. 92

2.13.2. Опасность HttpOnly…………………………………………………………………………………………………….. 95

2.13.3. Что дальше?…………………………………………………………………………………………………………………. 97

2.14. Подделка параметров………………………………………………………………………………………………………. 97

2.15. Флуд…………………………………………………………………………………………………………………………………. 100

2.16. XSS: межсайтовый скриптинг………………………………………………………………………………………… 102

2.16.1. Защита от XSS в .NET……………………………………………………………………………………………….. 103

2.16.2. Примеры эксплуатации XSS…………………………………………………………………………………….. 106

2.16.3. Типы XSS……………………………………………………………………………………………………………………. 108

2.16.4. Хранимая XSS……………………………………………………………………………………………………………. 109

2.16.5. XSS: текст внутри тега……………………………………………………………………………………………… 115

2.16.6. Скрипты……………………………………………………………………………………………………………………… 116

2.17. SQL Injection: доступ к недоступному………………………………………………………………………….. 117

2.18. CSRF: межсайтовая подделка запроса…………………………………………………………………………. 119

2.19. Загрузка файлов……………………………………………………………………………………………………………… 123

2.20. Контроль доступа…………………………………………………………………………………………………………… 125

2.21. Переадресация………………………………………………………………………………………………………………… 128

2.22. Защита от DoS…………………………………………………………………………………………………………………. 130

Глава 3. Основы производительности………………………………………………….. 135

3.1. Основы……………………………………………………………………………………………………………………………….. 135

3.2. Когда нужно оптимизировать?………………………………………………………………………………………… 137

3.3. Оптимизация и рефакторинг…………………………………………………………………………………………….. 138

3.4. Отображение данных……………………………………………………………………………………………………….. 139

3.5. Асинхронное выполнение запросов………………………………………………………………………………… 142

3.6. Параллельное выполнение………………………………………………………………………………………………. 143

3.7. LINQ…………………………………………………………………………………………………………………………………… 144

3.8. Обновление .NET………………………………………………………………………………………………………………. 146

Глава 4. Производительность в .NET……………………………………………………. 147

4.1. Типы данных……………………………………………………………………………………………………………………… 147

4.1.1. Производительность…………………………………………………………………………………………………… 147

4.1.2. Отличие структур от классов…………………………………………………………………………………….. 149

4.1.3. Ссылки на структуры…………………………………………………………………………………………………. 154

4.2. Виртуальные методы……………………………………………………………………………………………………….. 156

4.3. Управление памятью………………………………………………………………………………………………………… 158

4.4. Закрытие соединений с базой данных……………………………………………………………………………. 161

4.5. Циклы…………………………………………………………………………………………………………………………………. 164

4.6. Строки………………………………………………………………………………………………………………………………… 165

4.7. Исключительные ситуации………………………………………………………………………………………………. 167

4.8. Странный HttpClient…………………………………………………………………………………………………………. 168

Глава 5. Сеть………………………………………………………………………………………… 171

5.1. Проверка соединения……………………………………………………………………………………………………….. 171

5.2. Отслеживание запроса……………………………………………………………………………………………………… 172

5.3. Класс HTTP-клиент…………………………………………………………………………………………………………… 175

5.4. Класс Uri……………………………………………………………………………………………………………………………. 176

5.5. Уровень розетки………………………………………………………………………………………………………………… 178

5.5.1. Сервер………………………………………………………………………………………………………………………….. 178

5.5.2. Клиент………………………………………………………………………………………………………………………….. 182

5.6. Доменная система имен……………………………………………………………………………………………………. 184

Глава 6. Web API………………………………………………………………………………….. 187

6.1. Пример Web API………………………………………………………………………………………………………………… 187

6.2. JWT-токены……………………………………………………………………………………………………………………….. 188

6.3. Устройство токенов………………………………………………………………………………………………………….. 195

Глава 7. Трюки…………………………………………………………………………………….. 199

7.1. Кеширование…………………………………………………………………………………………………………………….. 199

7.1.1. Защита от XSS в .NET…………………………………………………………………………………………………. 199

7.1.2. Кеширование статичными переменными…………………………………………………………………. 203

7.1.3. Кеширование уровня запроса……………………………………………………………………………………. 204

7.1.4. Кеширование в памяти……………………………………………………………………………………………….. 205

7.1.5. Сервер кеширования…………………………………………………………………………………………………… 207

7.1.6. Cookie в качестве кеша……………………………………………………………………………………………….. 208

7.2. Сессии………………………………………………………………………………………………………………………………… 210

7.2.1. Пишем свою сессию……………………………………………………………………………………………………. 210

7.2.2. Безопасность сессии…………………………………………………………………………………………………… 212

7.3. Защита от множественной обработки…………………………………………………………………………….. 213

Заключение………………………………………………………………………………………….. 217

Литература…………………………………………………………………………………………… 219

Приложение. Описание файлового архива, сопровождающего книгу….. 221

Предметный указатель…………………………………………………………………………. 222

Фленов Михаил

Флёнов Михаил, профессиональный программист. Работал в журнале «Хакер», в котором несколько лет вел рубрики «Hack-FAQ» и «Кодинг» для программистов, печатался в журналах «Игромания» и «Chip-Россия». Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.