| Controllers | ||
| Models | ||
| Properties | ||
| Views | ||
| wwwroot | ||
| .gitignore | ||
| appsettings.Development.json | ||
| appsettings.json | ||
| Program.cs | ||
| README.md | ||
| TechnoWorld.csproj | ||
ТехноМир — Лабораторная работа №1
ASP.NET Core MVC проект интернет-магазина техники.
Автор: Борисов Иван Сергеевич, РПО 23/1, 2026
Описание проекта
Интернет-магазин «ТехноМир» — многостраничный сайт для продажи компьютерной и мобильной техники: ноутбуки, смартфоны, планшеты и наушники.
Реализованные страницы
| Страница | Описание |
|---|---|
| Главная | Промо-баннер, преимущества магазина, хиты продаж, CTA |
| Каталог | 4 карточки товаров с характеристиками и кнопкой «Купить» |
| О системе | Описание сервиса, роли пользователей, план развития |
| Контакты | Контактная информация, форма обратной связи с валидацией |
| 404 | Страница ошибки с кнопкой возврата на главную |
Технический стек
- 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:
- ExceptionHandler — перехватывает необработанные исключения
- HSTS — принудительное HTTPS в продакшене
- HttpsRedirection — перенаправление HTTP на HTTPS
- UseStaticFiles — раздача статических файлов из
wwwroot - Routing — сопоставление URL с маршрутами
- 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 с понятными серверными атрибутами.