2008-12-19 115 views
1

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

我使用ASP.NET MVC。

原始URL是:http://www.sample.com/Users.mvc/UserDetail/9615

“用户”是控制器的名字,在“UserDetail”是动作的名称,而“9615”是用户ID。

如何在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

ŧ汉克斯。

回答

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=""}); 

这应该做的伎俩。

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 
); 
相关问题