2015-02-24 36 views
0

我有一個MVC4應用程序,它在我的一個路由中有一些可選的參數。當兩個路由參數沒有值時,url會顯示爲「http://localhost:51424/MSDS/UpdateSupplier/SupplierNameHere//路由//在結尾處

有什麼辦法在末尾沒有顯示「//」? 路線目前工作,但我認爲它看起來有點傻傻的

這裏是我的路線

routes.MapRoute(
    name: "MSDS Update Supplier", 
    url: "MSDS/{action}/{supplier}/{Part_No}/{Product_ID}", 
    defaults: new { controller = "MSDS", action = "Index", supplier = UrlParameter.Optional, Part_No = UrlParameter.Optional, Product_ID = UrlParameter.Optional } 
    ); 

回答

0

有什麼辦法沒有底「//」說明了什麼?

是的,你可以擺脫可選參數。從技術上講,無論如何,每個路由應該只有一個可選參數。

您可以通過建立一組從最具體到最不具體的路線來完成相同的操作,每個路線處理特定數量的路段。該應用程序在路由後仍然可以工作,唯一的區別是它將根據多少段來匹配不同的路線,然後使用正確的/符號數適當地構建URL。

routes.MapRoute(
    name: "MSDS Update Supplier Part_No Product_ID", 
    url: "MSDS/{action}/{supplier}/{Part_No}/{Product_ID}", 
    defaults: new { controller = "MSDS", action = "Index", Product_ID = UrlParameter.Optional } 
    ); 

routes.MapRoute(
    name: "MSDS Update Supplier", 
    url: "MSDS/{action}/{supplier}", 
    defaults: new { controller = "MSDS", action = "Index", supplier = UrlParameter.Optional } 
    ); 

說明

第一條路線現在有需要段,因此,如果他們是不是所有的供應,他們將錯過然後框架會嘗試將列表中的下一個路由。

因此,從上到下運行路線,第一條路線將與MSDS匹配,然後是3或4個以上的段。

如果MSDS後面跟着1或2段,它將不匹配第一條路線(因爲它至少需要3條)並匹配第二條路線。