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 файлы).

Что касается большинства вещей, есть много способов решить вашу проблему: очистить все обработчики, использовать маршрутизацию,...

Надеюсь, это более понятно.

Другие вопросы по тегам