101 lines
7.8 KiB
Markdown
101 lines
7.8 KiB
Markdown
# ТехноМир — Лабораторная работа №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`
|
||
|
||
### Запуск
|
||
|
||
```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
|
||
<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 с понятными серверными атрибутами. |