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