Запросы на мои файлы css, js, изображений обслуживаются через конвейер ASP.NET. Я думал, что IIS по умолчанию избегает этого, но я вижу запросы на моей точке останова Application_AuthenticateRequest
, и нет необходимости фактически аутентифицировать эти запросы. Я видел противоречивые подходы к изменению этого поведения. Как лучше всего это сделать?
Запретить IIS обслуживать статические файлы через конвейер ASP.NET
Ответы (4)
Я делаю предположение и подозреваю, что в вашем файле web.config
настроен следующий параметр:
<modules runAllManagedModulesForAllRequests="true">
Это означает, что каждый запрос, в том числе для статического контента, попадает в конвейер.
Измените этот параметр на:
<modules runAllManagedModulesForAllRequests="false">
Предполагается, что ваше приложение работает под управлением ASP.NET 4.0 и MVC3.
Для этого вам необходимо установить KB980368 (требуется перезагрузка) или Windows 2008R2 SP1 (который включает это исправление). Причина этого объясняется в этой прекрасной статье:
Как работает маршрутизация ASP.NET MVC и ее влияние на производительность статических запросов
В итоге я добавил это в свой web.config. Я знаю, что все мои статические файлы будут находиться в этих папках, поэтому для моих нужд это нормально.
<location path="scripts">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="styles">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="images">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
В VS2012/MVC3 с включенным сервером разработки Visual Studio RAMMFAR=false не действует. Каждый запрос статических файлов по-прежнему попадает в обработчик событий Application_BeginRequest.
Я переключился на IIS Express и увидел желаемую функциональность.
Где-то в вашей конфигурации IIS или в web.config у вас есть сопоставление обработчика, настроенное для сопоставления этих файлов с вашим приложением ASP.Net.
Попробуйте удалить файл web.config и посмотрите, сможете ли вы по-прежнему просматривать эти типы файлов из IIS без ASP.Net. Если это не удастся, вы узнаете, что это ваш файл web.config, иначе вам придется проверить настройки IIS.
Шаг 2. Верните файл web.configs, затем удалите и заново создайте сайт — та же проблема? Это параметр в корне IIS, что означает, что он применяется ко всем сайтам — проверьте сопоставления обработчиков здесь.