Создавая пользовательские 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);
}
}
И я объявляю это так:
Но, даже используя предусловие, я вижу, как статические файлы проходят через модуль:
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":
И все вроде бы работает нормально, но я нашел эту статью: 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"
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>
Так что теперь я немного запутался, каков статус этого параметра? Должен ли я его использовать или нет? Почему он по умолчанию имеет значение "true"?
С уважением.