我有一个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 }
);
发布于 2015-02-24 18:03:19
有没有办法不让"//“在结尾显示?
是的,你可以去掉可选的参数。从技术上讲,每个路由只应该有一个可选的参数。
您可以通过构建一组从最特定到最不特定的路由来完成相同的任务,每个路由处理特定数量的段。应用程序在被路由后仍将工作相同,唯一的区别是它将匹配不同的路由,这取决于有多少段,然后适当地用正确的/
符号数构建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条)和匹配第二条路径。
https://stackoverflow.com/questions/28700232
复制相似问题