asp.net MVC - сократить маршрут, отключить старый маршрут

У меня есть сайт asp.net MVC 5.

У меня много маршрутов - например,

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

Первый является динамическим - последние два просто указывают на действия about & privacy в домашнем контроллере.

Это работает нормально, однако я бы хотел, чтобы все URL-адреса '/ home /' указывали на корень. например

http://example.com/home/privacy

Следует указать на

http://example.com/privacy

Я также хотел бы, чтобы старый путь больше не работал (дублирование контента плохо для SEO).

Первое сделать достаточно просто, но старый маршрут все еще работает. Как элегантно с этим справиться?

Спасибо.


person niico    schedule 07.10.2016    source источник
comment
Ознакомьтесь с этим ответом. stackoverflow.com/questions/3337372/   -  person Jason Yost    schedule 08.10.2016


Ответы (2)


Вы можете использовать Назначьте маршрутизацию и украсьте эти методы действий желаемым шаблоном.

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

Чтобы использовать маршрутизацию атрибутов, ее необходимо включить, вызвав MapMvcAttributeRoutes в вашем RouteConfig:

routes.MapMvcAttributeRoutes();

Другой вариант - указать определение маршрута до регистрации определения маршрута по умолчанию (порядок имеет значение. Таким образом, конкретное определение маршрута должно быть зарегистрировано до определения маршрута по умолчанию catch-rest) в вашем RouteConfig (традиционный подход к маршрутизации)

Поэтому добавьте конкретное определение маршрута в свой RegisterRoutes метод в RouteConfig.cs

//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, я предлагаю вам использовать метод маршрутизации атрибутов.

person Shyju    schedule 07.10.2016
comment
Спасибо - как бы вы сделали это в routeconfig.cs - и предотвратили провал home / для / home / версии маршрута? - person niico; 08.10.2016

вы можете использовать маршрутизацию атрибутов MVC5. Чтобы включить маршрутизацию атрибутов, напишите строку ниже в RouteConfig.cs

routes.MapMvcAttributeRoutes(); // Add this line

а затем ваш метод действия Homecontroller, подобный этому

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

чтобы узнать больше о MVC5,

person LateshtClick.com    schedule 08.10.2016