路线的末尾有//

Route has // at the end

我有一个 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 }
    );

Is there any way to not have "//" show at the end?

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

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