路线最后有//

时间:2015-02-24 15:50:03

标签: asp.net-mvc asp.net-mvc-4 routing asp.net-mvc-routing

我有一个MVC4应用程序,在我的一个路由中有一些可选参数。当两个路线参数没有值时,网址会显示为“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 }
    );

1 个答案:

答案 0 :(得分: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个)并匹配第二个路径。