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

时间:2008-12-19 06:12:00

标签: asp.net asp.net-mvc

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

我使用ASP.NET MVC。

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

“用户”是控制器名称,“UserDetail”是操作名称,“9615”是UserId。

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

就像这样: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

感谢。

2 个答案:

答案 0 :(得分:4)

这个想法是一样的。你做的就是你对行动所做的事情。但是,您的问题源于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无扩展名网址”)

之后,只需添加路线:

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

这应该可以解决问题。

答案 1 :(得分: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   
);