asp.net MVC - съкращаване на маршрута, деактивиране на стар маршрут

Имам сайт asp.net MVC 5.

Имам много маршрути - напр

http://example.com/places/placename
http://example.com/home/about
http://example.com/home/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();
   }
}

За да използвате Attribute Routing, то трябва да бъде активирано чрез извикване на 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/about и за /home/ версията на маршрута? - person niico; 08.10.2016

можете да използвате маршрутизиране на атрибути на MVC5. За да активирате маршрутизирането на атрибути, напишете под реда в RouteConfig.cs

routes.MapMvcAttributeRoutes(); // Add this line

и след това метода за действие на вашия Homecontroller като този

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

за да научите повече за MVC5 " extributing title="nofollow">" rel="nofollow"

person LateshtClick.com    schedule 08.10.2016