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

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


person kenwarner    schedule 08.06.2011    source источник


Ответы (4)


Я делаю предположение и подозреваю, что в вашем файле web.config настроен следующий параметр:

<modules runAllManagedModulesForAllRequests="true">

Это означает, что каждый запрос, в том числе для статического контента, попадает в конвейер.

Измените этот параметр на:

<modules runAllManagedModulesForAllRequests="false">

Предполагается, что ваше приложение работает под управлением ASP.NET 4.0 и MVC3.

Для этого вам необходимо установить KB980368 (требуется перезагрузка) или Windows 2008R2 SP1 (который включает это исправление). Причина этого объясняется в этой прекрасной статье:

Как работает маршрутизация ASP.NET MVC и ее влияние на производительность статических запросов

person Kev    schedule 08.06.2011
comment
это работает, но я ДЕЙСТВИТЕЛЬНО не хочу менять этот параметр, так как он влияет на другие вещи. надеюсь на альтернативу - person kenwarner; 07.02.2012
comment
@qntmfred - о, еще раз привет :). Есть ли шанс, что вы могли бы обновить свой вопрос и объяснить, что вы подразумеваете под поскольку это влияет на другие вещи.? - person Kev; 07.02.2012
comment
конечно, но я должен помнить, что это было первым ›.‹ - person kenwarner; 07.02.2012
comment
Я действительно делаю это, и это работает отлично, и для моих пользовательских модулей я использую precondition=managedHandler. - person vtortola; 13.02.2012
comment
@jackncoke - я бы так и подумал. На данный момент я как бы вне пространства для разработки ASP.NET/MVC/IIS, поэтому у меня не было возможности проверить. Соси и смотри :) - person Kev; 18.06.2014
comment
@jackncoke - хороший, рад, что смог помочь :) - person Kev; 18.06.2014

В итоге я добавил это в свой 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>
person kenwarner    schedule 10.06.2011
comment
Допускается ли несколько значений в атрибуте «путь»? Согласно следующей ссылке они не являются: stackoverflow.com/questions/4608764/ - person UserControl; 06.02.2012
comment
это просто предотвращает аутентификацию, но запросы статических файлов по-прежнему попадают в ваши управляемые модули. У @Kev есть правильный ответ. - person vtortola; 13.02.2012
comment
Вы не можете переопределить «аутентификацию» без изменения настроек applicationhost.config, вы это сделали? - person Antony Blazer; 14.11.2012

В VS2012/MVC3 с включенным сервером разработки Visual Studio RAMMFAR=false не действует. Каждый запрос статических файлов по-прежнему попадает в обработчик событий Application_BeginRequest.

Я переключился на IIS Express и увидел желаемую функциональность.

person LSU.Net    schedule 18.11.2014

Где-то в вашей конфигурации IIS или в web.config у вас есть сопоставление обработчика, настроенное для сопоставления этих файлов с вашим приложением ASP.Net.

Попробуйте удалить файл web.config и посмотрите, сможете ли вы по-прежнему просматривать эти типы файлов из IIS без ASP.Net. Если это не удастся, вы узнаете, что это ваш файл web.config, иначе вам придется проверить настройки IIS.

Шаг 2. Верните файл web.configs, затем удалите и заново создайте сайт — та же проблема? Это параметр в корне IIS, что означает, что он применяется ко всем сайтам — проверьте сопоставления обработчиков здесь.

person BonyT    schedule 08.06.2011