我有一个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 }
);
答案 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个)并匹配第二个路径。