繁体   English   中英

IIS 7.5集成管道对asp.net的请求

[英]IIS 7.5 integrated pipeline filter requests for asp.net

我可以以某种方式将匹配某种模式的请求发送到ASP.NET吗? 例如简单的*.mvc或使用/\\d+[.]mvc/i这样的正则表达式更复杂?

我的web.config system.webServer下有下一行

<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,并由管道中的各种托管模块处理。 具有非托管处理程序的请求也不会由托管代码处理,直到您将runAllManagedModulesForAllRequests=”true”或为UrlRoutingModule删除了“ managedHandler ”前置条件。

UrlRoutingModule检查请求,并将根据路由表更改处理程序映射。 如果不更改处理程序映射,则将使用原始处理程序映射-由IIS设置的一个。

从asp.net 4.0开始,对于无扩展网址,它也是一个新的通用“ *”处理程序。

有时在重写和路由之间存在很大的误解。 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.HttpForbiddenHandler (不想公开* .cs文件)。

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

希望这更加清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM