【问题标题】:asp.net MVC - shorten route, disable old routeasp.net MVC - 缩短路由,禁用旧路由
【发布时间】:2016-10-07 22:13:15
【问题描述】:

我有一个 asp.net MVC 5 站点。

我有很多路线 - 例如

http://example.com/places/placename
http://example.com/home/about
http://example.com/home/privacy

第一个是动态的 - 后两个只是指向家庭控制器中的 about 和 privacy 操作。

这很好用,但是,我希望所有 '/home/' URL 都指向根目录。例如

http://example.com/home/privacy

应该指向

http://example.com/privacy

我也希望旧路线不再起作用(内容重复对 SEO 不利)。

前者很容易做到,但旧路线仍然有效。有什么优雅的方式来处理这个问题?

谢谢。

【问题讨论】:

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


【解决方案1】:

您可以使用Attribute routing 并使用您想要的模式装饰这些操作方法。

public class HomeController : Controller
{
   [Route("privacy")]
   public ActionResult Privacy()
   {
      return view();
   }
   [Route("about")]
   public ActionResult About()
   {
      return view();
   }
}

为了使用属性路由,必须通过在 RouteConfig 中调用 MapMvcAttributeRoutes 来启用它:

routes.MapMvcAttributeRoutes();

另一种选择是在您的 RouteConfig(传统路由方法)

所以在RouteConfig.csRegisterRoutes 方法中添加一个特定的路由定义

//register route for about
routes.MapRoute( "about", "about",
        new { controller = "Home", action = "about" });

routes.MapRoute("Default", "{controller}/{action}/{id}",
         new { controller = "Home", action = "Index", id = UrlParameter.Optional });

使用传统路由方法,旧的(youtSite/home/about) 和新的路由模式 (yourSite/about) 将起作用。如果你只想要yourSite/about,我建议你走属性路由的方式。

【讨论】:

  • 谢谢 - 你将如何在 routeconfig.cs 中执行此操作 - 并防止 home/about 在 /home/ 版本的路由中失败?
【解决方案2】:

你可以使用 MVC5 的属性路由。要启用属性路由,请在 RouteConfig.cs

中写入以下行
routes.MapMvcAttributeRoutes(); // Add this line

然后你的 Homecontroller 的 Action 方法是这样的

[Route("privacy")]
public ActionResult Privacy()
{
   return view();
}

了解更多关于 MVC5 Attribute Routing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2023-04-03
    • 2011-03-28
    相关资源
    最近更新 更多