【问题标题】:How to hide controller name in Url?如何在 URL 中隐藏控制器名称?
【发布时间】:2008-12-19 06:12:00
【问题描述】:

如何在 Url 中隐藏控制器名称?

我使用 ASP.NET MVC。

原网址为:http://www.sample.com/Users.mvc/UserDetail/9615

“Users”是控制器名称,“UserDetail”是动作名称,“9615”是UserId。

如何在 url 中隐藏控制器名称和操作名称。

就像这样:http://www.sample.com/9615

我在 Global.ascx.cs 中编写了以下代码来隐藏动作名称:

routes.MapRoute(
             "UserDetail",             // Route name
             "Users.mvc/{UserId}",              // URL with parameters
             new { controller = "Users", action = "UserDetail", UserId = "" }  // Parameter defaults
            );

使用上面的代码,我隐藏了动作名称并得到了这个网址:http://www.sample.com/Users.mvc/9615

但我怎样才能隐藏控制器名称并获取此网址:http://www.sample.com/9615

谢谢。

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    这个想法是一样的。你只做你对行动所做的事情。但是,您的问题源于 IIS 可能没有将 www.xyz.com/1234 映射到 ASP.NET 运行时。为此,在 IIS7 中启用集成模式,在 IIS6 中,在将所有内容映射到 ASP.NET 的处理程序映射中添加通配符映射。

    要添加通配符映射,请参阅http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx(在该页面中搜索“IIS6 Extension-less URLs”)

    之后,只需添加一条路线:

    routes.MapRoute("UserDetails", "{UserID}/{*name}", 
        new { controller = "Users", action = "UserDetail" , UserID=""});
    

    这应该可以解决问题。

    【讨论】:

      【解决方案2】:

      MVC 识别“{UserID}”和“{id}”之间的区别,因此如果您要在 Url 中使用只有“{UserID}”的路由,则需要将其放在列表的首位,否则永远不会被击中。并确保默认包含“id”,因为它将不断循环遍历“UserDetails”,除非默认引用 id 与 UserID 相对。我发现这种格式适合我:

      routes.MapRoute("UserDetails",
             "{UserID}",
             new { controller = "Users", action = "UserDetail", id = "" }
      );
      routes.MapRoute(
             "Default", // Route name
             "{controller}/{action}/{id}", // URL with parameters               
             new { controller = "Account", action = "LogOn", id = "" } // Parameter defaults   
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-08
        • 1970-01-01
        • 2014-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多