Что делает файл Web.Config в папке представлений проекта MVC

85

У меня возникли проблемы с развертыванием моего приложения, и во время устранения неполадок я обнаружил Web.Configфайл в Viewsпапке. Пытаясь сузить круг возможных источников для моей проблемы, я попытался выяснить назначение этого файла ~ Web.Config`, но не смог найти много информации.

Итак, в основном мои вопросы:

  1. Что делает Web.configфайл в Viewsпапке проекта MVC?
  2. Это обязательно?

В веб-формах Asp.Net я считаю, что для использования отдельного файла web.config в папке эта папка должна быть установлена ​​как виртуальная папка в IIS. Так ли это в MVC (т.е. Viewsнужно ли настраивать папку как виртуальную)?

Ола Карлссон
источник
15
Нет "глупых" вопросов
contactmatt
8
Никогда не бойтесь задавать «глупые» вопросы. Если вы не знаете ответа, это не «глупо». Ничего глупого в том, чтобы лучше понять что-то.
DazManCat
4
SO известен тем, что обливает пользователей напалмом, чтобы они задавали вопросы ...
Пангамма

Ответы:

79

Нет, вам не нужно настраивать виртуальную папку из-за этого дополнительного файла web.config.

Файл web.config существует в папках Views, чтобы предотвратить доступ к вашим представлениям любыми способами, кроме вашего контроллера. В шаблоне проектирования MVC предполагается, что контроллеры маршрутизируют запросы и возвращают визуализированное представление вызывающему клиенту.

Другими словами, ваше представление на www.mydomain.com/MySuperController/AwesomeAction1/SweetPage.aspx не должно быть напрямую доступно.

Если вы заглянете в файл web.config, он фактически регистрирует HttpNotFoundHandlerвсе пути и глаголы:

<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>

Или в IIS 7 это может выглядеть как

<add name="BlockViewHandler" path="*.aspx" verb="*" 
    preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
Дэвид Фокс
источник
21
Но сгенерированный файл web.config содержит огромное количество другого текста - это все лишнее?
Eamon Nerbonne
7

Он настраивает компилятор для представлений, таких как импорт пространств имен, и заставляет папку представлений возвращать 404.

Дэниел А. Уайт
источник
7

Файл web.config в папке представлений предназначен для выполнения некоторых специальных настроек, которые вы хотите применить к страницам внутри папки представления.

Как настройки конфигурации, такие как: строка подключения / настройки приложений и т. Д.

но это будет применимо только к этой папке, а остальная часть проекта получит настройки из web.config, находящегося в корне.

Особенно, когда вы используете концепцию области, для каждой области будет отдельная папка, содержащая отдельный файл web.cfg, где вы можете применить отдельные настройки для каждой области.

Prajwal
источник
6

Это если вы хотите переопределить что-то, упомянутое в верхней части web.config, т.е. если вы хотите настроить что-то в пределах Viewsпапки.

Ken D
источник