Asp.net mvc 路线末端有//

Asp.net mvc 路线末端有//,asp.net-mvc,asp.net-mvc-4,routing,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 4,Routing,Asp.net Mvc Routing,我有一个MVC4应用程序,在我的一条路由中有一些可选参数。当两个路由参数没有值时,url显示如下“” 有没有办法在结尾不显示“/”呢? 这条路线目前可行,但我认为它看起来有点愚蠢 这是我的路线 routes.MapRoute( name: "MSDS Update Supplier", url: "MSDS/{action}/{supplier}/{Part_No}/{Product_ID}", defaults: new { controller = "MSDS", a

我有一个MVC4应用程序,在我的一条路由中有一些可选参数。当两个路由参数没有值时,url显示如下“”

有没有办法在结尾不显示“/”呢? 这条路线目前可行,但我认为它看起来有点愚蠢

这是我的路线

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 }
    );
有没有办法在结尾不显示“/”呢

是的,您可以去掉可选参数。从技术上讲,每条路线都应该只有一个可选参数

通过建立一组从最特定到最不特定的管线,每个管线处理特定数量的管段,可以实现相同的目的。应用程序在路由后仍然可以正常工作,唯一的区别是它将根据段数匹配不同的路由,然后使用正确数量的
/
符号适当地构建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条),而匹配第二条路线