2016-10-07 2 views
0

J'ai un site asp.net MVC 5.asp.net MVC - raccourcir la route, désactiver l'ancienne route

J'ai beaucoup d'itinéraires - par exemple

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

La première est dynamique - les deux derniers points seulement aux actions sur & de la vie privée dans le contrôleur de la maison. Cela fonctionne très bien, cependant, je voudrais que toutes les URL '/ home /' pointent vers la racine. par exemple

http://example.com/home/privacy 

doit pointer vers

http://example.com/privacy 

Je voudrais aussi que l'ancienne route de ne plus travailler (duplication de contenu est mauvais pour le référencement).

Le premier est assez facile à faire, mais l'ancienne route fonctionne toujours. Quelle est une façon élégante de gérer cela?

thx.

+0

Vérifiez cette réponse http : //stackoverflow.com/questions/3337372/asp-net-mvc-removing-controller-name-from-url –

Répondre

2

Vous pouvez utiliser Attribute routing et décorer ces méthodes d'action avec le motif souhaité.

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

Pour utiliser l'attribut de routage, il doit être activé en appelant MapMvcAttributeRoutes dans votre RouteConfig:

routes.MapMvcAttributeRoutes(); 

Une autre option est de spécifier une définition d'itinéraire avant d'enregistrer la définition d'itinéraire par défaut (l'ordre La définition d'itinéraire spécifique doit donc être enregistrée avant la définition d'itinéraire par défaut catch-rest) dans votre RouteConfig (approche de routage traditionnelle)

Donc, ajoutez un sp définition de la route écifiques dans votre méthode RegisterRoutes dans 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 }); 

Avec l'approche traditionnelle de routage, votre ancien (youtSite/home/about) et le nouveau modèle de route (yourSite/about) fonctionnera. Si vous voulez seulement yourSite/about, je vous suggère d'utiliser l'approche de routage d'attributs.

+0

Merci - Comment le feriez-vous dans routeconfig.cs - et d'empêcher la maison/à propos de tomber à travers le/home/ver la route de la route aussi? – niico

+0

@niico Mise à jour de la réponse avec cette information. – Shyju

1

vous pouvez utiliser le routage d'attribut de MVC5. Pour activer l'attribut routage, sous la ligne dans RouteConfig.cs

routes.MapMvcAttributeRoutes(); // Add this line 

et votre méthode d'action de HomeController comme celui-ci

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

en savoir plus sur MVC5 Attribute Routing