TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1019 1.22K
День восемьсот тридцать второй. #ЗаметкиНаПолях
Добавляем MVC в приложении
ASP.NET Core
Сегодня обсудим методы AddController(), AddMvc(), AddControllersWithViews() и AddRazorPages() в приложениях ASP.NET Core. Всё это методы расширения IServiceCollection. Они используются в методе ConfigureServices() класса Startup. На первый взгляд, всё вроде очевидно, но что же конкретно делает каждый из них, и когда какой использовать?

Для начала подробно рассмотрим, какие функции доступны в каждом методе.

Все методы поддерживают:
- Контроллеры
- Связывание модели
- Авторизацию
- Валидацию

AddController() помимо общих функций поддерживает:
- API Explorer
- CORS
- Форматирование вывода

AddRazorPages() помимо общих функций поддерживает:
- Antiforgery (защита от атак CSRF)
- TempData
- Представления
- Страницы (Razor Pages)
- Тег-хелперы
- Кеш в памяти

AddControllersWithViews() поддерживает всё, что есть в AddController() и AddRazorPages(), кроме Страниц (т.е. только чистый MVC).

AddMvc() поддерживает всё, включая Страницы.

Основные моменты
- Если вам нужны только контроллеры, включая привязку модели (выбор подходящего метода действия контроллера), авторизацию и валидацию данных, вы можете использовать любой из методов.
- ApiExplorer содержит функции для обнаружения и предоставления метаданных о вашем приложении MVC. Он используется для предоставления таких сведений, как список контроллеров и действий, их URL-адреса и разрешенные методы HTTP, параметры и типы ответов. Например, его использует Swagger для генерации документации API. ApiExplorer доступен во всех методах, кроме AddRazorPages().
- CORS позволяет серверу ослабить политику одного источника (same-origin policy). Система безопасности браузера запрещает клиентскому коду страницы делать запросы к домену, отличному от того, который обслуживает веб-страницу. Это ограничение называется политика одного источника. Она предотвращает чтение вредоносным сайтом конфиденциальных данных с другого сайта. Иногда может потребоваться разрешить другим сайтам выполнять запросы между разными доменами в приложении. За это отвечает CORS, который доступен везде, кроме AddRazorPages().
- Форматирование вывода (Formatter Mapping) используется для возможности выводить ответ в различных форматах, таких как JSON, XML и т.п. Опять же, доступно везде, кроме AddRazorPages().
- Функция кэширования в памяти через IMemoryCache недоступна только в методе AddControllers(), но доступна в остальных трёх.

Какой метод использовать для вашего приложения?
Это зависит от того, какое приложение вы хотите создать.
- Если вы хотите создать приложение веб-API без представлений, используйте AddControllers().
- Если вы хотите работать с приложением на Razor Pages, используйте AddRazorPages().
- Если вы хотите использовать MVC, используйте AddControllersWithViews(). А если в этом приложении вам требуются и Razor Pages, используйте AddMVC().

Таким образом, AddMvc() включает все возможности. То есть вы можете использовать любой тип приложения (веб-API, MVC и Razor Pages). Однако, имейте в виду, что использование метода AddMvc() добавляет все функции, даже если они вам не требуются, что может повлиять на производительность приложения.

Источник: https://dotnettutorials.net/lesson/difference-between-addmvc-and-addmvccore-method/
More from @netdeveloperdiary
  1. Oct 18, 2026День 2818. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  2. Oct 17, 2026День 2817. #ЧтоНовенького #VS Прекращаем Сборку После Первой Ошибки Мэдс Кристенсен продол…
  3. Oct 16, 2026День 2816. #Карьера #AI Станет ли ИИ-Кодинг Концом Программирования для Людей? Автор ориги…
  4. Oct 15, 2026Post #3374
  5. Oct 14, 2026Post #3373
  6. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →