IIS 7.5路由不起作用(所有常用方法都经过测试)

时间:2011-05-13 10:20:46

标签: asp.net routing iis-7.5

我的客户有一个网页,其中包含在global.asax中添加的自定义路线(它们是无扩展名):

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
Routing.RouteTable.Routes.Clear()
Routing.RouteTable.Routes.MapPageRoute("Key1", "String", "~/Route")

不幸的是,这种重定向在IIS 7.5上不起作用。我测试过了:

  • 通过IIS安装HTTP重定向
  • 尝试runAllManagedModulesForAllRequests =“true”(在web.config中)
  • 使用手动添加UrlRoutingMode(http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html)

集成模式下的池,4.0。该服务器运行了很多MVC3页面,默认情况下它们使用路由。

任何光都会非常黯然失色!感谢

=============================================== =======================

编辑:好的,我找不到任何解决方案。

在webconfig中,内部程序集:

<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

在system.webServer:

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<defaultDocument>
<files><add value="Page.aspx" /></files>
</defaultDocument>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule"/>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule,System.Web.Routing,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35" />
   </modules>



</system.webServer>

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

我的解决方案,在尝试了一切之后:

部署不当,旧的 PrecompiledApp.config 挂在我的部署位置,并使一切都无法正常工作。

我的最终设置有效:

  • IIS 7.5,Win2k8r2 x64,
  • 集成模式应用程序池
  • web.config中没有任何变化 - 这意味着没有用于路由的特殊处理程序。这是我很多其他帖子参考的部分的快照。我正在使用FluorineFX,所以我确实添加了该处理程序,但我不需要任何其他程序:

    <system.web>
      <compilation debug="true" targetFramework="4.0" />
      <authentication mode="None"/>
    
      <pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
      <httpRuntime requestPathInvalidCharacters=""/>
    
      <httpModules>
        <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/>
      </httpModules>
    </system.web>
      <system.webServer>
        <!-- Modules for IIS 7.0 Integrated mode -->
        <modules>
          <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx" />
        </modules>
    
        <!-- Disable detection of IIS 6.0 / Classic mode ASP.NET configuration -->
        <validation validateIntegratedModeConfiguration="false" />
      </system.webServer>
    
  • Global.ashx :(只有任何注释的方法)

    void Application_Start(object sender, EventArgs e) {
        // Register routes...
        System.Web.Routing.Route echoRoute = new System.Web.Routing.Route(
              "{*message}",
            //the default value for the message
              new System.Web.Routing.RouteValueDictionary() { { "message", "" } },
            //any regular expression restrictions (i.e. @"[^\d].{4,}" means "does not start with number, at least 4 chars
              new System.Web.Routing.RouteValueDictionary() { { "message", @"[^\d].{4,}" } },
              new TestRoute.Handlers.PassthroughRouteHandler()
           );
    
        System.Web.Routing.RouteTable.Routes.Add(echoRoute);
    }
    
  • PassthroughRouteHandler.cs - 这实现了从http://andrew.arace.info/stackoverflowhttp://andrew.arace.info/#stackoverflow的自动转换,然后由default.aspx处理:

    public class PassthroughRouteHandler : IRouteHandler {
    
        public IHttpHandler GetHttpHandler(RequestContext requestContext) {
            HttpContext.Current.Items["IncomingMessage"] = requestContext.RouteData.Values["message"];
            requestContext.HttpContext.Response.Redirect("#" + HttpContext.Current.Items["IncomingMessage"], true);
            return null;
        }
    }