11
votes

Comment corriger correctement une URL dans une application ASP.NET MVC?

J'essaie de trouver un bon moyen général de canoniser des URL dans une application ASP.NET MVC 2. Voici ce que je suis venu avec à ce jour:

[Canonicalize]
public class HomeController : Controller { /* ... */ }


2 commentaires

Il existe un moyen de l'obtenir sur le site de Site dans MVC3 via des filtres globaux, mais en moins de MVC3, vous devez créer un contrôleur de base, appliquer l'attribut à cela et dériver tous les contrôleurs de celui-ci. Je dois demander quel est le cas d'utilisation pour cela?


SEO. S'assurer que les araignées entrant des liens incorrectement formatés sont redirigés (en permanence) au bon - le boîtier inférieur est juste un de côté. EN.Wikipedia.org/wiki/Canonicalisation#search_engines_and_se o


3 Réponses :


6
votes

Voici comment je fais mes URL canoniques dans MVC2. J'utilise le module IIS7 v2 rewrite pour faire toutes mes URL minuscules et dépouilleront des barres obliques arrière alors ne pas besoin de le faire de mon code. ( complet Blog post a>)

Ajoutez ceci à la page principale dans la section de la tête comme suit: strong> p>

[CanonicalURL("Contact-Us")]
public ActionResult Index()
 {
      ContactFormViewModel contact = new ContactFormViewModel(); 
      return View(contact);
}


4 commentaires

Je suppose qu'il y a une erreur ici. Regardez-la, si vous modifiez le titre dans l'URL, il redirige toujours ici. Avec votre code, je suppose que cela rendrait une mauvaise URL. Donc, rend la même chose quel que soit le chemin


L'URL est injectée de l'action. Son travail n'est pas de rediriger uniquement pour indiquer qu'il s'agit de l'URL principale de cette ressource.


J'aime cette idée, beaucoup de Tidyer que d'essayer de le déterminer automatiquement de l'itinéraire ou de certains hack comme ça. +1 AAA commenterait à nouveau


Merci pour votre commentaire, j'espère que cela aidé d'une manière ou d'une autre! :)



20
votes

J'ai ressenti la même "démangeaison" en ce qui concerne la nature détendue de l'acheminement par défaut ASP.NET MVC, ignorant la boîte à lettres, des barres obliques, etc. Comme vous, je voulais une solution générale au problème, de préférence dans le cadre de la Logique de routage dans mes applications.

Après avoir recherché sur le Web haut et bas, ne trouvant aucune bibliothèque utile, j'ai décidé de rouler moi-même. Le résultat est Canonicaliser , une bibliothèque de classe open source qui complète le moteur de routage ASP.NET. < / p>

Vous pouvez installer la bibliothèque via Nuget: install-package canonicalize

Et dans votre itinéraire Enregistrement: routes.canonicaliser (). minuscule ();

Outre les minuscules, plusieurs autres stratégies de canonalisation de l'URL sont incluses dans l'emballage. Force www Préfixe de domaine ON ou OFF, forcer un nom d'hôte spécifique, une barre oblique de fuite, etc. Il est également très facile d'ajouter des stratégies de canonalisation de l'URL personnalisées, et je suis très ouvert à accepter des corrections supplémentaires. à la distribution "officielle" canonicaliser .

J'espère que vous ou quelqu'un d'autre trouverez cela utile, même si la question est d'un an :)


3 commentaires

Va certainement vérifier.


Fonctionne bien pour la redirection d'un nom d'hôte qui correspond au certificat SSL - merci


Excellente bibliothèque, ce que je cherchais. Merci.



9
votes

MVC 5 et 6 a la possibilité de générer des URL minuscules pour vos itinéraires. Mon itinéraire est affiché ci-dessous: xxx pré>

avec ce code, vous ne devez plus avoir besoin de canonaliser l'URL comme cela est fait pour vous. Un problème qui peut se produire si vous utilisez des URL HTTP et HTTPS et souhaitez une URL canonique pour cela. Dans ce cas, il est assez facile d'utiliser les approches ci-dessus et de remplacer HTTP avec HTTPS ou inversement. P>

Un autre problème est des sites Web externes qui pointent sur votre site peuvent omettre la barre oblique de fuite ou ajouter des caractères majuscules et pour cela, vous devez effectuer une redirection permanente de 301 à l'URL correcte avec la barre oblique. Pour l'utilisation complète et le code source, reportez-vous à My Publication du blog et le RedirectTocanonicalurlattribute Code> Filtre: P>

filters.Add(new RedirectToCanonicalUrlAttribute(
    RouteTable.Routes.AppendTrailingSlash, 
    RouteTable.Routes.LowercaseUrls));


5 commentaires

Pourquoi utiliser un filtre d'autorisation lorsque vous devez utiliser un filtre d'action? Le bacon n'est pas gammon pour une raison.


IAuthorizationFilter est le bon choix. Voir Cette répond. Le filtre est exécuté plus tôt dans le pipeline de demande. Idéalement, si nous allons rediriger un utilisateur, nous devrions le faire le plus tôt possible.


Cela ne dit rien lorsque vous devez utiliser des filtres d'autorisation au lieu d'actions. Je pense à cette occasion, nous devrions accepter de ne pas être d'accord.


Assez juste. Le requishttpsattribute utilise également le iAuthorizizDfilter pour effectuer une redirection. C'est la performance vs nommage, il appartient aux Devs ce qu'ils préfèrent.


C'est parce qu'il concerne la sécurité. Votre redirection de l'URL canonique ne le fait pas.