Подтвердить что ты не робот

Запретить IIS обслуживать статические файлы через конвейер ASP.NET

Запросы на мои css, js, файлы изображений подаются через конвейер ASP.NET. Я думал, что IIS по умолчанию избегал этого, но я вижу запросы на моей контрольной точке Application_AuthenticateRequest, и нет необходимости на самом деле аутентифицировать эти запросы. Я видел противоречивые подходы к изменению этого поведения. Каков наилучший способ сделать это?

4b9b3361

Ответ 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, что означает, что он применяется ко всем сайтам - проверьте сопоставления обработчиков здесь.