2008-12-10 5 views
1

Je vais prendre l'exemple du site SO. Pour aller à la liste des questions, l'URL est www.stackoverflow.com/questions. Derrière la scène, cela va à un contrôleur (dont le nom est inconnu) et à l'une de ses actions. Disons que c'est controller = home et action = questions.Routage Asp.Net MVC: meilleur moyen d'avoir un seul élément dans l'URL?

Comment empêcher l'utilisateur de taper www.stackoverflow.com/ accueil/des questions qui conduiraient à la même page et abaisserait le rang de la page en ce qui concerne le référencement est. Est-ce qu'il faut une redirection pour résoudre cela? Est-ce qu'il faut des règles de routage spéciales pour gérer ce genre de situation? Autre chose?

Merci

Répondre

1

Je suppose que le contrôleur est questions et l'action a été index, à savoir, l'action par défaut définie par le gestionnaire d'itinéraire. Il n'y a donc pas de chemin alternatif à la page.

+0

Vous avez sûrement raison. Mais qu'en est-il de/questions et/questions/index alors? C'est encore 2 urls pour la même page. –

+0

Je crois que SO, au moins, interdit l'itinéraire/questions/index - il n'existe pas. Donc, la réponse semble être de ne pas mettre en place un itinéraire que vous ne voulez pas servir. – tvanfosson

1

Pendant Phil Haack's presentation from PDC, Jeff montre une partie du code source pour Stack Overflow. Parmi les choses qu'il montre est le code pour certains des enregistrements de route. Il les a dans les contrôleurs, et il n'est pas clair pour moi qu'il utilise une route par défaut du tout. Sans itinéraire par défaut, vous n'avez pas à vous soucier de/home/questions, par exemple. En ce qui concerne/questions/index, oui, une redirection permanente est la voie à suivre. Vous n'obtiendrez aucune pénalité de moteur de recherche pour une redirection permanente.

Une autre façon d'éliminer/home/questions serait d'utiliser une contrainte de route.

1

Vous souhaitez utiliser l'itinéraire suivant. Il est vraiment facile de créer simplement un nouvel itinéraire qui élimine le besoin pour le contrôleur d'être sur la route. Vous créez une chaîne de modèle qui contient juste l'action et vous par défaut le contrôleur au contrôleur que vous souhaitez utiliser comme "Accueil".

routes.MapRoute(
    "MyRoute", 
    "{action}", 
    new { controller = "Home", action = (string)null }, 
    new { action = "[a-zA-z_]+" } 
); 

Hope this helps.