2015-02-24 110 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条)并匹配第二条路线。