【问题标题】:Two different generic route types两种不同的通用路由类型
【发布时间】:2010-01-28 12:50:40
【问题描述】:

我的 ASP.NET MVC 应用程序中有两种(到目前为止)不同类型的路由,一种是:{controller}/{action}/{id},另一种是 {controller}/{action}/{标题}

目前我需要像这样定义路由:

        routes.MapRoute (
            "Default_Title_Slug",                                       // Route name
            "product/details/{title}",                          // URL with parameters
            new { controller = "product", action = "details", title = "" }      // Parameter defaults
        );

        routes.MapRoute (
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "site", action = "index", id = "" }  // Parameter defaults
        );

请注意,我必须将第一个绑定到产品控制器,这似乎是我可以让它工作的唯一方法......否则其他路线最终看起来像这样:

/controller/action?id=number

现在我需要添加另一个 MapRoute 调用,该调用针对具有 {title} 段的另一个控制器...我不想为将来提出的每个特定条目创建新路由...有没有我可以创建通用路由来映射 /controller/action/title 可以很好地与 /controller/action/id 路由配合使用吗?

谢谢,
基隆

【问题讨论】:

  • 请停止回滚添加正确标签的更改
  • 它已经在 asp.net 下被标记,实际上路由是特定于 asp.net 的。停止添加无意义的标签。
  • 重新标记;路由比 MVC 更广泛(它也可以与 webforms 一起使用),很少有人会关注这样一个 granalur 标签 - 两者都值得拥有。

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


【解决方案1】:

您可以使用路由约束来做到这一点,例如正则表达式 - 非常 类似的示例是 here。比如:

routes.MapRoute (
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "site", action = "index", id = "" },
    new { id = @"\d+" }
);
routes.MapRoute (
    "Default_Title_Slug",
    "{controller}/{action}/{title}",
    new { controller = "product", action = "details", title = "" }
);

【讨论】:

  • 为了清楚起见,Default_Title_Slug 现在也可以将其 url 更改为 {controller}/{action}/id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 2018-09-08
  • 1970-01-01
  • 2019-10-20
  • 2021-06-09
  • 2020-05-14
  • 2014-12-09
相关资源
最近更新 更多