Создавая собственные модули 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 обрабатывает этот запрос, верно?
С уважением.
ОБНОВЛЕНИЕ:
Я отключил «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, и у него уже есть пустое предварительное условие:
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>
Так что теперь я немного запутался, что это застатус этого параметра?Я должен использовать это или не должен?почему по умолчанию оно считается "true"?
С уважением.