【问题标题】:Advanced ASP Routing tutorials and examples高级 ASP 路由教程和示例
【发布时间】:2011-01-21 09:56:39
【问题描述】:

我最近似乎遇到的一个主要障碍是我正在开发一些基于 MVC 的应用程序的一些更复杂的路由要求。 我无法找到正确的教程集来引导我完成它以获得完整的理解。

我想找到一套完整的教程,涵盖从基本(控制器/动作/id)到高级的所有路由。

我称之为高级路由的一个例子是:

/blog/year/month/day/title - 将映射到控制器:blog 和操作:post 和作为参数:yearmonthdaytitle

/blog/title - 将映射到控制器:blog 和操作:post 并作为参数:title

/title - 将映射到控制器:blog 和操作:post 并作为参数:title

我可以使用数据库将每个可能的集合映射到全局的显式路由,但这似乎违背了让路由引擎路由到正确位置的意义。我宁愿定义一次规则。

【问题讨论】:

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


    【解决方案1】:

    我不明白,为什么你不能将它们中的每一个定义为单独的路由,在需要时使用正则表达式。例如区分/blog/year/month/day/title/blog/title

    这些集合中的每一个都是一个单独的案例,您需要告诉 MVC 如何处理每个案例。您可以通过defining the rule onceGlobal.asax.cs 文件中执行此操作:

    对于第一种情况:/blog/year/month/day/title

    routes.MapRoute(
        "Blog Full Route", // Route name
        "blog/{year}/{month}/{day}/{title}", // URL with parameters
        new {controller = "blog", action = "post"},   // Defaults
        new {year = @"\d+", month= @"\d+", day = @"\d+"} // Constrain parameters with RegEx patterns
        );
    

    第二种情况:/blog/title

    routes.MapRoute(
        "Blog Title Route", // Route name
        "blog/{title}", // URL with parameters
        new {controller = "blog", action = "post"},   // Defaults
        );
    

    最后一种情况:/title

    routes.MapRoute(
        "Title Route", // Route name
        "{title}", // URL with parameters
        new {controller = "blog", action = "post"},   // Defaults
        );
    

    诀窍是将这些路线按这种确切的顺序排列,最不具体的放在底部。更改顺序会导致使用错误的路线(特别是在最后两条路线中)。如果将最后一种情况切换到第二种情况,blog/SomeTitle 类型的 URLS 将路由到以blog 为标题的post 操作。

    每当您为某事创建路线时,请牢记以下几点:

    1. 使用 RegEx 约束路由参数
    2. very 了解路线顺序(哪条路线在哪条之前)
    3. 波浪括号{something} 表示动作参数

    一些不错的教程:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 2014-10-28
      • 2011-09-02
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多