ASP.Net URL Routing仅在`runAllManagedModulesForAllRequests`为true时有效

时间:2013-07-05 06:29:00

标签: asp.net web-config url-routing

我在IIS中设置了URL路由。当我将runAllManagedModulesForAllRequests设置为true时,URL路由将起作用。

使用以下web.config(并且runAllManagedModuesForAllRequests设置为false),我得到404:

  <system.web>
    <compilation defaultLanguage="c#" debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </assemblies>
    </compilation>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="UrlRoutingHandler" />
      <add name="UrlRoutingHandler"
           preCondition="integratedMode"
           verb="*"
           path="UrlRouting.axd"
           type="System.Web.HttpForbiddenHandler, 
                     System.Web, Version=2.0.0.0, 
                     Culture=neutral, 
                     PublicKeyToken=b03f5f7f11d50a3a" />
    </handlers>
    <modules>
      <remove name="UrlRoutingModule" />
      <add name="UrlRoutingModule"
            type="System.Web.Routing.UrlRoutingModule, 
                System.Web.Routing, 
                Version=3.5.0.0, 
                Culture=neutral, 
                PublicKeyToken=31BF3856AD364E35"/>
    </modules>
  </system.webServer>

如何仅为特定请求设置网址?

我在IIS 7.5和IIS 8中测试了此配置。这是在Web表单应用程序中。所有URL都演示了404行为。

1 个答案:

答案 0 :(得分:0)

“runAllManagedModulesForAllRequests”为true,意味着asp.net处理程序(当然,当你处于集成模式时)将触发所有扩展(包括无扩展),如果你没有aspx并且它被设置为false你的模块无法处理它。

您无法针对您要实现的目标设置扩展的子集,但您可以在模块中自行过滤以仅处理某些扩展。