【问题标题】:IIS 7.5 integrated pipeline filter requests for asp.net用于 asp.net 的 IIS 7.5 集成管道过滤器请求
【发布时间】:2013-06-05 15:16:20
【问题描述】:

我能否以某种方式向 ASP.NET 部分发送与某些模式匹配的only 请求? 例如。简单的*.mvc 或更复杂的使用正则表达式,如/\d+[.]mvc/i

我的web.configsystem.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>

【问题讨论】:

    标签: asp.net iis integrated-pipeline-mode


    【解决方案1】:

    你的问题不是很清楚,但让我尝试一个答案。

    在最初收到请求时,IIS 将 URL 映射到处理程序。有托管处理程序(asp.net)和非托管处理程序(IIS 内置)。带有托管处理程序的请求将进入 ASP.NET 并由管道中的各种托管模块进行处理。在您设置runAllManagedModulesForAllRequests=”true” 或删除UrlRoutingModule 的“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.HttpForbiddenHandler(不想暴露 *.cs 文件)。

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

    希望这更清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 2011-04-06
      • 2011-08-13
      相关资源
      最近更新 更多