2008-12-19 127 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 
); 
相關問題