【问题标题】:Duplicate content in ASP.NET MVC because of custom routes MapRoute(), are areas the rescue?由于自定义路由 MapRoute() 导致 ASP.NET MVC 中的重复内容,是救援区域吗?
【发布时间】:2010-04-29 00:01:06
【问题描述】:

我为我的 URL 使用自定义路由,我的操作可以通过两个 URL 访问(不包括斜杠和小写\大写字母):一个通过我的自定义路由 /my-custom-route-url/,另一个通过默认路由 /controller/action

我看到了一种可能的解决方案——将所有使用默认路由的控制器(它们主要是后端)放在一个区域中,并将所有其他控制器放在单独的区域中并在没有默认路由的情况下使用它。

可能有更好的方法吗?

【问题讨论】:

    标签: asp.net-mvc routing


    【解决方案1】:

    在我看来,默认路线是不必要的邪恶。这很有帮助,因为这意味着您编写的代码更少,但实际上我发现手动创建每条或至少大多数路线要好得多。

    区域是分隔应用程序不同部分的好方法,但只是为了避免处理空白默认路由而使用它并不是正确的原因。我使用区域将我的管理区域与我的默认区域隔离开来,但我这样做的原因是它们是两个独立的系统。

    如果您愿意,可以根据需要为每个控制器设置默认路由。例如,你可以有一个默认的products/{action} 路由和一个默认的home/{action} 路由,然后在ContactController 中单独定义每个路由或者你有什么。

    routes.MapRoute(
        "Products_Default",
        "products/{action}",
        new {controller = "Products", action = "Index"},
        new[] {"Web.Components.Controllers"}
    );
    
    routes.MapRoute(
        "Contact_Send",
        "contact/send",
        new {controller = "Contact", action = "SendMessage"},
        new[] {"Web.Components.Controllers"}
    );
    
    routes.MapRoute(
        "Contact_Home",
        "contact",
        new {controller = "Contact", action = "Index"},
        new[] {"Web.Components.Controllers"}
    );
    

    【讨论】:

      【解决方案2】:

      恕我直言,这是重复的,应该避免。您可以使用 IIS 的 URL 重写通过其重写模块来执行此操作。

      可以在 IIS 级别重写自定义 URL 以使用正常的控制器和操作,我认为这应该符合您的目的。

      更多信息请看这里:http://learn.iis.net/page.aspx/460/using-url-rewrite-module/

      【讨论】:

      • 自定义路由也适用于生成传出 URL,使用 Url Rewrite 解决方案我应该在 URL 重写配置中复制路由...
      • 我以为您要的是所有控制器您的任何控制器或操作。
      • 使用 URL Rewrite 时,重写逻辑与您的应用程序解耦,因此如果您决定通过不同的自定义 URL 访问内容,您可以在不更改代码的情况下进行更改。
      • 我检查了 URL Rewrite -- 好像是在 Web.config 中配置的,不错,谢谢指点!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2018-05-31
      相关资源
      最近更新 更多