Создавая пользовательские модули IHttpModules, я понял, что запросы на статические файлы (например,.css и .js файлы) попадают в управляемые модули. Вероятно, фотографии имеют одинаковую проблему. Не следует ли IIS обходить ASP.NET для файлов, которые существуют в файловой системе?
Например:
public class MyModule:IHttpModule
{
public void Dispose(){ }
public void Init(HttpApplication context)
{
context.BeginRequest += (o, e) => Debug.Print("Request: " + HttpContext.Current.Request.RawUrl);
}
}
И я объявляю это следующим образом:
<modules runAllManagedModulesForAllRequests="true">
<add name="MyModule" preCondition="managedHandler" type="MVCX.Modules.MyModule, MVCX"/>
</modules>
Но, даже используя предварительное условие, я вижу, как статические файлы проходят через модуль:
Request: /MVCX/
Request: /MVCX/Content/Site.css
Request: /MVCX/Scripts/jquery-1.4.4.min.js
Я попытался игнорировать правила для статических файлов, но это не имеет значения:
routes.IgnoreRoute("{Content}/{*pathInfo}");
routes.IgnoreRoute("{Scripts}/{*pathInfo}");
Это обычное дело? Или я чего-то не хватает? Насколько мне известно, если IIS запрашивает статический запрос на файл. Если мой управляемый модуль ударяется, значит, поток потока CLR ThreadPool обрабатывает этот запрос, правильно?
С уважением.
UPDATE:
Я отключил "runAllManagedModulesForAllRequests":
<modules runAllManagedModulesForAllRequests="false">
<add name="MyModule" preCondition="managedHandler" type="MVCX.Modules.MyModule, MVCX" />
</modules>
И все работает нормально, но я нашел эту статью: http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html, которая рекомендует удалять и читать "UrlRoutingModule-4.0" модуль с пустым предварительным условием.
Я моя машина, добавление этого модуля находится в корневой web.config, и у него уже есть пустое preCondition:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>type machine.config | find "UrlRouting"
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>type web.config | find "UrlRouting"
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>
Итак, теперь я немного смущен, каков статус этого параметра? Должен ли я использовать его или не должен? почему он по умолчанию считается истинным?
С уважением.