homework/README.md

9.6 KiB
Raw Blame History

ТехноМир — Лабораторная работа №1

ASP.NET Core MVC проект интернет-магазина техники.

Автор: Борисов Иван Сергеевич, РПО 23/1, 2026


Описание проекта

Интернет-магазин «ТехноМир» — многостраничный сайт для продажи компьютерной и мобильной техники: ноутбуки, смартфоны, планшеты и наушники.

Реализованные страницы

Страница Описание
Главная Промо-баннер, преимущества магазина, хиты продаж (из данных), CTA
Каталог 14 товаров из данных, фильтр по 5 категориям, поиск
Корзина Добавление, изменение количества, удаление, очистка, оформление
Вход Авторизация по cookie, регистрация, личный кабинет
О системе Описание сервиса, роли пользователей, план развития
Контакты Контактная информация, форма обратной связи с валидацией
404 Страница ошибки с кнопкой возврата на главную

Каталог и данные

  • Модель Product и хранилище Data/ProductStore с 14 товарами по 5 категориям
  • Категории: Ноутбуки, Смартфоны, Планшеты, Наушники, Аксессуары
  • Фильтр по категории: Catalog/Index?category=...
  • Поиск по названию и характеристикам: Catalog/Index?q=...
  • Общая частичная карточка _ProductCard.cshtml для каталога и хитов

Корзина

  • Хранение — сессия CartService (Services/CartService.cs), данные в JSON
  • Кнопка «Купить» на карточке добавляет товар; счётчик в шапке обновляется
  • Страница Cart/Index: изменение количества, удаление позиции, очистка
  • Оформление заказа очищает корзину и показывает подтверждение через TempData

Вход и аккаунт

  • Cookie-аутентификация (Microsoft.AspNetCore.Authentication.Cookies)
  • Account/Login и Account/Register — авторизация и регистрация с валидацией
  • Пользователи хранятся в памяти (Data/UserStore), пароли — SHA-256
  • Личный кабинет Account/Profile (только для авторизованных)
  • Шапка: показывает логин + «Выйти» для вошедших, «Войти» для гостей

Технический стек

  • ASP.NET Core MVC (.NET 10)
  • Bootstrap 5.3 (CDN) — сетка, меню, формы
  • Bootstrap Icons (CDN) — иконки интерфейса
  • HTML, CSS, JavaScript
  • Светлая / тёмная тема (localStorage)

Функциональность ЛР №1

  • Маршрутизация: /{controller=Home}/{action=Index}/{id?}
  • Tag Helpers: asp-controller, asp-action, asp-for, asp-validation-for, asp-append-version
  • Клиентская и серверная валидация формы ContactViewModel ([Required], [Phone])
  • PRG-паттерн + TempData для отображения результата POST-запроса
  • Переключение темы через data-theme на <html> с ранней блокировкой от мигания
  • Open Graph мета-теги, favicon
  • Кастомная страница ошибки через UseStatusCodePagesWithReExecute

Запуск

dotnet run --urls http://localhost:5000

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

1. Чем ASP.NET Core отличается от классического ASP.NET Framework?

ASP.NET Core — это полностью переписанный, модульный кросс-платформенный фреймворк, в то время как классический ASP.NET Framework работает только на Windows и зависит от IIS.

Основные отличия:

  • Кросс-платформенность: ASP.NET Core запускается на Windows, Linux и macOS через встроенный Kestrel-сервер, не зависящий от IIS.
  • Модульность: каждая функция подключается как отдельный NuGet-пакет (Middleware), а не встроена в ядро. Вместо тяжёлого System.Web используется минимальный pipeline из компонентов.
  • Производительность: Kestrel оптимизирован под асинхронные сценарии и обрабатывает запросы значительно быстрее, чем IIS + ASP.NET.
  • Среда выполнения: приложение может быть self-contained (без установки .NET Runtime на целевой машине) или framework-dependent. Модель деплоя более гибкая: Docker-контейнеры, systemd-юниты, консоль.
  • Конфигурация: вместо web.config используется appsettings.json + environment variables, что упрощает управление параметрами в разных средах.

2. Что такое middleware и в каком порядке они выполняются при обработке запроса?

Middleware — это компоненты, образующие конвейер (pipeline), через который проходит каждый HTTP-запрос. Каждый middleware может обработать запрос, передать его дальше или вернуть ответ, не передавая дальше.

Порядок важен. Типичный pipeline:

  1. ExceptionHandler — перехватывает необработанные исключения
  2. HSTS — принудительное HTTPS в продакшене
  3. HttpsRedirection — перенаправление HTTP на HTTPS
  4. UseStaticFiles — раздача статических файлов из wwwroot
  5. Routing — сопоставление URL с маршрутами
  6. UseEndpoints — вызов соответствующего контроллера/действия

Для 404 используется UseStatusCodePagesWithReExecute: он перехватывает ответ с кодом 404/500 и перезапускает обработку, передавая код ошибки параметром.

3. Зачем нужны _ViewStart.cshtml и _ViewImports.cshtml?

_ViewStart.cshtml выполняется перед каждым представлением и задаёт общие настройки. Здесь он определяет, что все страницы автоматически используют макет _Layout.cshtml.

_ViewImports.cshtml определяет общие using-директивы и подключает Tag Helpers для всех представлений в текущей папке. Здесь подключаются:

  • @using TechnoWorld — доступ к моделям без полного namespace.
  • @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers — включение Tag Helpers.

4. Откуда берутся CSS/JS/изображения и как они подключаются через Razor?

Файлы хранятся в wwwroot/ проекта и подключаются через Razor:

<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<script src="~/js/site.js" asp-append-version="true"></script>

Тег ~ разрешается в корень wwwroot. Атрибут asp-append-version добавляет хеш для инвалидации кеша браузера. Библиотеки подключаются через CDN (Bootstrap) или локально из wwwroot/lib/.

5. Что такое Tag Helper и почему он удобнее обычного HTML?

Tag Helper — серверная замена HTML-тегов с атрибутами, начинающимися с asp-. Преимущества:

  • Автоматическая генерация URL: <a asp-controller="Home" asp-action="Index"> вместо ручного прописывания пути.
  • Валидация: <input asp-for="Name" /> автоматически генерирует атрибуты для клиентской валидации.
  • Безопасность: экранирование значений, защита от XSS.
  • Инвалидация кеша: asp-append-version="true" без написания хелпера.
  • Читаемость: разметка выглядит как чистый HTML с понятными серверными атрибутами.