1

這裏沒有什麼幫助和建議。.NET MVC路由工程,除了一塊

工作在我的第一個MVC應用程序,我有一個學生設置的實體。
學生管理員和具有基本CRUD功能的視圖。 mysite.com/Student讓我到那裏。

現在我想添加付款,所以我添加了一個付款控制器和基本crud的意見。 ,讓我mysite.com/Payments

我希望透過去,看起來像一個URL:mysite.com/Student/Payments

所以我研究了URL路由和(我認爲)我弄錯了的很長一段時間,似乎沒有任何工作。但是現在,我已經創建了這條附加路線:

 routes.MapRoute(
      "Payments", 
      "Student/Payments/{action}/{id}", 
      new { Controller = "Payments", action = "Index", id = UrlParameter.Optional } 
      ); 

現在,它似乎一切正常。當我將ActionLink發送到付款控制器中的任何操作時,該URL是正確的。例如:www.mysite.com/Student/Payments/Edit/5是URL。

我遇到的問題是Payments仍然是基本的URL路由。因此,我也可以通過訪問www.mysite.com/Paysments

獲得付款如何「刪除」該路線,以便mysite.com/Payments無效?還是我以某種方式做這個屁股後退?

任何幫助表示讚賞。

回答

1

你的這種思考方式扭曲了周圍。映射配置僅提供規則的分層列表以指定特定網址的代碼所在的位置。

所以當你說它仍然擊中mysite.com/Payments。這是因爲它擊中默認規則在您的Global.asax

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults 
      ); 

你可以刪除這一點,但隨後沒有默認規則將正常工作。

或者您可以添加忽略規則。在你的情況像

 routes.IgnoreRoute("Payments/{action}/{id}"); 

請確保你把這個默認規則。

0

您需要使用圖路線方法的重載爲您的默認路由即:

routes.MapRoute( 
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index" }, 
    new { controller = ""}); //there constraints for controller goes 

this blog post有關創建自定義的限制,有例如對「不等於」