| TechMarket | ||
| .gitignore | ||
| README.md | ||
| TechMarket.slnx | ||
ТехноМаркет — лабораторная работа № 1
Проект ASP.NET Core MVC: запускаемый сайт с единым макетом и четырьмя страницами. Выполнен в рамках дисциплины «Разработка web-приложений».
Автор
| Поле | Значение |
|---|---|
| ФИО | Рыбалов Кирилл Андреевич |
| Группа | РПО 23/1 |
| Год | 2026 |
| Вариант | не задан, тема выбрана самостоятельно — интернет-магазин электроники |
Как запустить
- Установить .NET SDK (в работе использовался SDK 10.0, проект собран под .NET 10).
- Открыть файл решения
TechMarket.slnxили папку проектаTechMarket. - Запустить проект командой:
dotnet run --project TechMarket
- Открыть в браузере адрес http://localhost:5213 (настройка из
launchSettings.json).
Страницы сайта
| Страница | Адрес | Что на ней |
|---|---|---|
| Главная | / |
описание магазина, 3 преимущества, кнопка «Перейти в каталог» |
| Каталог | /catalog |
4 статичные карточки-заглушки товаров (позже — из БД) |
| О системе | /about |
для кого сервис и какие роли появятся |
| Контакты | /contacts |
адрес, телефон и форма обратной связи (с сообщением «принято» через TempData) |
| Ошибка | /error |
страница 404 с понятным текстом и ссылкой на главную |
Что реализовано в коде
- маршрутизация по соглашению
/{controller}/{action}/{id?}+ атрибутные маршруты у страниц каталога, о системе и контактов; - макет
_Layout.cshtmlсо шапкой, меню «Главная · Каталог · О системе · Контакты» и подвалом с группой, ФИО и годом; _ViewStart.cshtmlзадаёт общий макет,_ViewImports.cshtmlвключает Tag Helpers;- форма контактов построена на Tag Helpers (
asp-controller,asp-action,asp-for) с проверкой полей на стороне сервера и в браузере; - Bootstrap 5 подключён локально (файлы лежат в
wwwroot/lib); - своя CSS-тема: акцентный цвет, стили карточек, состояния наведения;
- светлая / тёмная тема через CSS-переменные с сохранением выбора в
localStorage; - фавикон и Open Graph-теги, кастомная страница 404.
Структура проекта
TechMarket/
├── Controllers/HomeController.cs — контроллер страниц и обработки формы
├── Models/ — модели: ошибка и форма контактов
├── Views/
│ ├── Home/ — страницы: Главная, Каталог, О системе, Контакты, 404
│ └── Shared/ — макет и общие представления
├── wwwroot/
│ ├── css/site.css — своя тема оформления
│ ├── js/site.js — переключатель светлой / тёмной темы
│ └── lib/ — локальные библиотеки Bootstrap 5 и jQuery
├── Program.cs — точка входа: сервисы и конвейер запросов
└── appsettings.json — настройки приложения
Контрольные вопросы
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), а не встроена в ядро.
- Производительность: Kestrel оптимизирован под асинхронные сценарии и обрабатывает запросы значительно быстрее.
- Среда выполнения: поддержка self-contained и 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 — вызов контроллера/действия
В TechMarket используется UseStatusCodePagesWithReExecute("/Home/Error") для перехвата кодов 404/500 и отображения пользовательской страницы ошибки.
3. Зачем нужны _ViewStart.cshtml и _ViewImports.cshtml?
_ViewStart.cshtml выполняется перед каждым представлением и задаёт Layout = "_Layout" — общий макет для всех страниц.
_ViewImports.cshtml подключает общие using-директивы и Tag Helpers:
@using TechMarket— доступ к моделям.@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers— включение Tag Helpers.
4. Откуда берутся CSS/JS/изображения и как они подключаются через Razor?
Файлы хранятся в wwwroot/ и подключаются через Razor:
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<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 добавляет хеш для инвалидации кеша браузера.
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 с серверными атрибутами.