asp.net的IIS 7.5集成管道筛选器请求

asp.net的IIS 7.5集成管道筛选器请求,asp.net,iis,integrated-pipeline-mode,Asp.net,Iis,Integrated Pipeline Mode,我是否可以只向ASP.NET部分发送符合某些模式的请求? 例如,简单的*.mvc或使用类似regex的/\d+[.]mvc/i更复杂 在我的web.config <modules runAllManagedModulesForAllRequests="true"> <remove name="UrlRoutingModule" /> <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutin

我是否可以只向ASP.NET部分发送符合某些模式的请求? 例如,简单的
*.mvc
或使用类似regex的
/\d+[.]mvc/i
更复杂

在我的
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>

你的问题不是很清楚,但让我试着回答

最初收到请求时,IIS会将URL映射到处理程序。有托管处理程序(asp.net)和非托管处理程序(IIS内置)。带有托管处理程序的请求将进入ASP.NET,并由管道中的各种托管模块进行处理。具有非托管处理程序的请求也不会由托管代码处理,除非您为
UrlRoutingModule
设置
runAllManagedModulesForAllRequests=“true”
或删除“
managedHandler
”前提条件

UrlRoutingModule检查请求,并根据路由表更改处理程序映射。如果它没有更改处理程序映射,那么将使用原始的处理程序映射——由IIS设置的映射

自asp.net 4.0以来,还为无扩展Url提供了一个新的通用“*”处理程序

在重写和路由之间有时会有很大的误解。URL重写用于在Web服务器处理请求之前操作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.httpBankedenHandler
(不想公开*.cs文件)

对于大多数事情,有很多方法可以解决您的问题:清除所有处理程序,使用路由

希望这更清楚