【问题标题】:Route has // at the end路线末尾有 //
【发布时间】:2015-02-24 15:50:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    有什么办法可以不显示“//”吗?

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多