【问题标题】:How to achieve asp.net mvc action name with hyphen?如何用连字符实现 asp.net mvc 动作名称?
【发布时间】:2013-09-06 08:42:15
【问题描述】:

如何使用连字符实现 asp.net mvc 动作名称,例如 www.domain.com/about-us 其中about-us 是主控制器中的动作名称。通过这种方法,我可以实现具有contact-ushow-to 等操作名称。

【问题讨论】:

  • 路线也应该可以

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


【解决方案1】:

您可以在actionName 标签内提供您的操作名称。

[ActionName("about-us")]
public ActionResult AboutUs() {
    return View();
}

【讨论】:

  • 请注意,使用 ActionName 会为动作名称创建别名;它不会更改动作的名称。有副作用。 Read more here.
  • 这种方法在大多数情况下会导致重复的内容。使用默认路由配置, /home/about-us 和 /about-us 都将映射到相同的内容。这不推荐用于 SEO。
【解决方案2】:

以下是 .Net MVC 5 项目问题的完整解决方案:

  1. 打开您项目的 App_Start/RouteConfig.cs 文件。

  2. 在你的 RegisterRoute 方法中,修改如下代码:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapMvcAttributeRoutes(); // <--- add this line to enable custom attribute routes
    
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
    
  3. 现在,打开您的控制器文件,然后在您的操作顶部添加自定义路由的定义,如下所示:

    [Route("about-us")]
    public ActionResult AboutUs()
    {
        return View();
    }
    

您现在应该可以像这样使用您的自定义路由了:

http://yourdomain.com/about-us

【讨论】:

  • 这是正确答案。这种方法不会导致多个路由映射到相同的内容,这对 SEO 不利。使用此方法,您也不必更改视图 (.cshtml) 文件的名称。
  • MVC4 怎么样?有没有类似的解决方案?
  • 不知道 MVC4。对不起。
【解决方案3】:

AreaRegistration.cs 文件中,您可以添加如下路由表条目.....

        context.MapRoute(
            "about_us_default",
            "about-us",
            new { action = "AboutUs" }
        );

【讨论】:

    【解决方案4】:

    在 MVC5 中你也可以设置属性路由:

        [Route("about-us")]
        public ActionResult AboutUs()
        {
            return View();
        }
    

    【讨论】:

    • @JhourladEstrella 我可以确认它确实有效,因为我在我的项目中使用了它。在您的代码隐藏中引用该操作时,您仍应将其称为 AboutUs:Url.Action("AboutUs") 但生成的 URL 将是 about-us
    • 他没有提到他的答案的配置先决条件。因此,答案不能独立存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2011-11-04
    • 2011-07-13
    • 2011-02-19
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多