ТехноМир — лабораторная работа №1 по ASP.NET Core MVC
Go to file
2026-09-14 03:11:50 +05:00
Controllers ЛР 1: дизайн интернет-магазина, деплой и ответы на контрольные вопросы 2026-09-14 03:11:50 +05:00
Models ЛР 1: дизайн интернет-магазина, деплой и ответы на контрольные вопросы 2026-09-14 03:11:50 +05:00
Properties Лабораторная работа 1: каркас ASP.NET Core MVC (ТехноМир) 2026-09-14 01:49:15 +05:00
Views ЛР 1: дизайн интернет-магазина, деплой и ответы на контрольные вопросы 2026-09-14 03:11:50 +05:00
wwwroot ЛР 1: дизайн интернет-магазина, деплой и ответы на контрольные вопросы 2026-09-14 03:11:50 +05:00
.gitignore ЛР 1: дизайн интернет-магазина, деплой и ответы на контрольные вопросы 2026-09-14 03:11:50 +05:00
appsettings.Development.json Лабораторная работа 1: каркас ASP.NET Core MVC (ТехноМир) 2026-09-14 01:49:15 +05:00
appsettings.json Лабораторная работа 1: каркас ASP.NET Core MVC (ТехноМир) 2026-09-14 01:49:15 +05:00
Program.cs ЛР 1: дизайн интернет-магазина, деплой и ответы на контрольные вопросы 2026-09-14 03:11:50 +05:00
README.md ЛР 1: дизайн интернет-магазина, деплой и ответы на контрольные вопросы 2026-09-14 03:11:50 +05:00
TechnoWorld.csproj Лабораторная работа 1: каркас ASP.NET Core MVC (ТехноМир) 2026-09-14 01:49:15 +05:00

ТехноМир — Лабораторная работа №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:

  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 с понятными серверными атрибутами.