# ТехноМир — Лабораторная работа №1 ASP.NET Core MVC проект интернет-магазина техники. **Автор:** Борисов Иван Сергеевич, РПО 23/1, 2026 --- ## Описание проекта Интернет-магазин «ТехноМир» — многостраничный сайт для продажи компьютерной и мобильной техники: ноутбуки, смартфоны, планшеты и наушники. ### Реализованные страницы | Страница | Описание | |----------------|-----------------------------------------------------------------| | **Главная** | Промо-баннер, преимущества магазина, хиты продаж (из данных), CTA | | **Каталог** | 14 товаров из данных, фильтр по 5 категориям, поиск | | **О системе** | Описание сервиса, роли пользователей, план развития | | **Контакты** | Контактная информация, форма обратной связи с валидацией | | **404** | Страница ошибки с кнопкой возврата на главную | ### Каталог и данные - Модель `Product` и хранилище `Data/ProductStore` с 14 товарами по 5 категориям - Категории: Ноутбуки, Смартфоны, Планшеты, Наушники, Аксессуары - Фильтр по категории: `Catalog/Index?category=...` - Поиск по названию и характеристикам: `Catalog/Index?q=...` - Общая частичная карточка `_ProductCard.cshtml` для каталога и хитов ### Технический стек - **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` на `` с ранней блокировкой от мигания - Open Graph мета-теги, favicon - Кастомная страница ошибки через `UseStatusCodePagesWithReExecute` ### Запуск ```bash 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: ```html ``` Тег `~` разрешается в корень `wwwroot`. Атрибут `asp-append-version` добавляет хеш для инвалидации кеша браузера. Библиотеки подключаются через CDN (Bootstrap) или локально из `wwwroot/lib/`. ### 5. Что такое Tag Helper и почему он удобнее обычного HTML? Tag Helper — серверная замена HTML-тегов с атрибутами, начинающимися с `asp-`. Преимущества: - **Автоматическая генерация URL:** `` вместо ручного прописывания пути. - **Валидация:** `` автоматически генерирует атрибуты для клиентской валидации. - **Безопасность:** экранирование значений, защита от XSS. - **Инвалидация кеша:** `asp-append-version="true"` без написания хелпера. - **Читаемость:** разметка выглядит как чистый HTML с понятными серверными атрибутами.