如何在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
感谢。
答案 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
);