2014-10-06 164 views
0

在我的MVC4項目中,我有一個url http://domain.com/ {controller}/{action} /。 要確定哪些網頁用戶訪問和並獲得當前活動菜單項我用這樣的HttpContext.Request.Url.AbsolutePath.ToLower()獲取沒有url參數的MVC路徑路徑

然而,在某些情況下,URL路徑路徑是/{控制器}/{行動}/{ID}等,這些實際上都是/{controller}/{action} /?{id} =值

如果沒有參數,我如何獲得/{controller}/{action}/如果它們被路由規則覆蓋?

謝謝。

回答

0

如何在當前路線之前添加一條新路線,就像這樣。

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", 
           id = UrlParameter.Optional } 
      ); 

新航線將是這樣的 -

routes.MapRoute(
       name: "**Withoutparam**", 
       url: "{controller}/{action}", 
       defaults: new { controller = "Home", action = "Index" } 
      ); 

請注意,您需要在RouteConfig.cs當前的路線之前添加這條路線。這是因爲MVC從上到下開始在RouteConfig文件中搜索路由。一旦找到任何匹配的路線,它將停止進一步搜索。因此,對於你的問題,當沒有參數的路線將會選擇「Withoutparam」路線。

正如我可以從您的評論理解如下。在任何情況下,您都需要無ID的網址。如果是這樣,那麼我認爲你可以這樣做: -

var url = new StringBuilder(); 

string[] partOfUrl = HttpContext.Request.Url.AbsolutePath.ToLower().split('/'); 

for(int count = 0; count< (partOfUrl.Length - 1); count++) 
{ 
    url.Append(partOfLength[count] + "/") 
} 

使用url.ToString()作爲你想要的url。

+0

(即你傳遞'id'只能通過查詢字符串)你只能保留'{controller}/{action}'路線。 – Albireo 2014-10-06 07:15:58

+0

他也在某個時間使用id。 – Mukund 2014-10-06 07:24:10

+1

是的,但是如果他只是* *作爲參數傳遞(他說*「這實際上是*),他不需要'{控制器}/{動作}/{id}'路線。 – Albireo 2014-10-06 07:26:18

1

您是否只對控制器和操作名稱感興趣?

如果是這樣,請使用控制器的RouteData屬性。

你可以使用它是這樣的:如果你不積極使用`{控制器}/{行動}/{ID}`路線

public ActionResult Index() 
{ 
    var controller = this.RouteData.Values["controller"]; 
    var action = this.RouteData.Values["action"]; 
} 
+0

不是真的,在某些情況下,我有/管理/ {控制器}/{行動} 在一些/ {控制器}/{動作}/{id}和一些/管理/ {控制器}/{動作}/{id} – DolceVita 2014-10-06 07:09:29

+0

@DolceVita那麼你必須使用Mukund的解決方案,**除非**你正在使用'/ {controller}/{action}/{id}'路由和'/ {controller}/{action}?{id} = value'。 – Albireo 2014-10-06 07:12:07