IIS 7.5 встроенный конвейерный фильтр запросов для asp.net
Могу ли я как-то отправить в ASP.NET часть только запрос, который соответствует некоторому шаблону? Например, простой *.mvc
или более сложный, используя регулярные выражения, такие как /\d+[.]mvc/i
?
У меня есть следующие строки под system.webServer
в моем web.config
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<remove name="UrlRoutingHandler" />
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpNotFoundHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
1 ответ
Ваш вопрос не очень понятен, но позвольте мне попробовать ответить.
URL-адреса сопоставляются с обработчиками IIS при первоначальном получении запроса. Существуют управляемые обработчики (asp.net) и неуправляемые обработчики (встроенные IIS). Запрос с управляемым обработчиком войдет в ASP.NET и будет обрабатываться различными управляемыми модулями в конвейере. Запрос с неуправляемым обработчиком также не будет обрабатываться управляемым кодом, пока вы не установите runAllManagedModulesForAllRequests=”true”
или удаляяmanagedHandler
"предварительное условие для UrlRoutingModule
,
UrlRoutingModule проверяет запросы и изменяет отображение обработчика в соответствии с таблицей маршрутов. Если оно не изменяет сопоставление обработчика, то будет использоваться исходное сопоставление обработчика, установленное IIS.
Начиная с asp.net 4.0, это также новый универсальный обработчик "*" для URL без расширения.
Иногда существует переоценка между переписыванием и маршрутизацией. Перезапись URL используется для манипулирования путями URL до обработки запроса веб-сервером. (модуль перезаписи не знает, какой обработчик в конечном итоге обработает запрос, обработчик запроса может не знать, что URL был переписан. С другой стороны, маршрутизация ASP.NET используется для отправки запроса обработчику на основе запрошенного пути URL Это продвинутый механизм отображения обработчиков.
Вот пример управляемых обработчиков моего корневого web.config
<httpHandlers>
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" />
<add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
<add path="*.asmx" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
...
<add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
<add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
<add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
<add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
...
<add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True" />
<add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True" />
</httpHandlers>
Как вы можете видеть, этот конфиг System.Web.UI.PageHandlerFactory
но сопоставляет *.cs с System.Web.HttpForbiddenHandler
(не хочу выставлять *.cs файлы).
Что касается большинства вещей, есть много способов решить вашу проблему: очистить все обработчики, использовать маршрутизацию,...
Надеюсь, это более понятно.