2013-07-07 46 views
4

路線:ASP.NET MVC 4條部分航線不工作

routes.MapRoute(
    "Customer_widget", 
    "customer/widget/{action}/{id}", 
    new { controller = "Customer_Widget", id = UrlParameter.Optional }); 

測試URL1:(沒有工作) customer/widget/contact_list/1-1004-SC-0-0-0-0-0-0-Supplier-Supplier----0-0-0-0-Year-Calendar-0-Home-0

測試URL2:(不工作)

customer/widget/contact_list/1-1004-SC-0-0-0-0-0-0-Supplier-Supplier--6%2f1%2f2013-7%2f6%2f2013--0-0-0-0-Year-Calendar-0-Home-0 (does not work) 

我測試了上述兩個URL。第一個網址到達正確的位置。但第二個網址只是失去了它的方式... 我不知道是什麼原因造成了這個... 我認爲白天部分,6%2f1%2f2013-7%2f6%2f2013,導致一些問題,但我是不知道那是什麼。

CustomerController

public ActionResult Index(string id = null) 
    { 
     string temp = "~/customer/widget/contact_list/" + this.objURL.ToString(); 
     return Redirect("~/customer/widget/contact_list/" + this.objURL.ToString()); 
    } 

Customer_WidgetController

public ActionResult Contact_list(string id = null) 
    { 
     return PartialView("_contact_list",Customer_Widget.Contact_list.Load(id, ref errors)); 
    } 

流CustomerController - >(由地圖路線)Customer_WidgetController

回答

0

這都是因爲編碼斜線對應於 '%2F' 符號「的/ 」。因爲這是你的網址

customer/widget/contact_list/1-1004-SC-0-0-0-0-0-0-Supplier-Supplier--6%2f1%2f2013-7%2f6%2f2013--0-0-0-0-Year-Calendar-0-Home-0 

闖入8段:

  1. 客戶
  2. 部件
  3. CONTACT_LIST
  4. 1-1004-SC-0-0-0-0-0 -0-供應商 - 供應商 - 6
  5. 2013-7
  6. 2013--0-0-0-0年日曆 - 0 - 首頁 - 0

但在你的路線,你期待4.

爲了定義的變盤點您可以使用星號(*),如下所示:

routes.MapRoute(
    "Customer_widget", 
    "customer/widget/{action}/{*id}", 
    new { controller = "Customer_Widget", id = UrlParameter.Optional }); 

路由系統會按順序檢查路由。因此,您需要小心謹慎,並儘可能低地定義這樣的路線,因爲它可以捕獲您不希望用此路線捕捉的請求。例如,如果下面的路線將在您的系統中定義在路線之上,則它將永遠不會被捕獲:

routes.MapRoute(
     "Customer_widget", 
     "customer/widget/{action}/{lang}/{*id}", 
     new { controller = "Customer_Widget", lang = "en", id = UrlParameter.Optional } 
     new { lang = "en|es|ru"});