La troncation de la Chaîne de Requête & Retour Propre URL de C# ASP.net
Je voudrais profiter de l'URL d'origine, de tronquer les paramètres de chaîne de requête, et le retour au propre version de l'URL. Je voudrais à se produire à travers l'ensemble de l'application, de sorte que l'exécution par le biais du global.asax serait l'idéal. Aussi, je pense qu'une redirection 301 serait dans l'ordre en tant que bien.
ie.
dans: www.website.com/default.aspx?utm_source=twitter&utm_medium=médias sociaux
out: www.website.com/default.aspx
Quelle serait la meilleure façon d'atteindre cet objectif?
Vous devez vous connecter pour publier un commentaire.
Système.Uri est votre ami ici. Cela a de nombreux utilitaires, mais celui que vous voulez, c'est GetLeftPart:
Cela donne à la sortie: http://www.website.com/default.aspx
[La classe Uri exige le protocole, http://, à préciser],
GetLeftPart basicallys dit "obtenir la partie gauche de l'uri jusqu'à la partie que j'ai préciser". Cela peut être le Schéma (il suffit de le http://bit), de l'Autorité (le http://www.website.com partie), Chemin (le /par défaut.aspx) ou de la Requête (la requête).
En supposant que vous êtes sur une page web aspx, vous pouvez alors utiliser la Réponse.Redirect(newUrl) pour rediriger le visiteur.
Espère que ça aide
Voici un truc simple
Cela peut sembler un peu mieux.
Suivie par une fonction de bien récupérer l'URL de l'application.
Fonctionne parfaitement.
Voici un moyen rapide d'obtenir le chemin d'accès racine sans le chemin d'accès complet et de requête.
Je devine que vous voulez faire parce que vous voulez que vos utilisateurs de voir assez à la recherche d'Url. La seule façon d'obtenir le client à "changer" de l'URL dans la barre d'adresse est de l'envoyer à un nouvel emplacement, c'est à dire vous avez besoin de les rediriger.
Sont les paramètres de chaîne de requête va affecter le résultat de votre page? Si oui, vous aurez à regarder comment maintenir l'état entre les demandes (les variables de session, les cookies, etc.) parce que vos paramètres de chaîne de requête sera perdu dès que vous rediriger vers une page sans eux.
Il existe quelques façons dont vous pouvez faire cela à l'échelle mondiale (par ordre de préférence):
IHttpModule
est un gentil, réutilisable à rouler propre approche.global.asax
comme vous le suggérez,Vous ne devez utiliser les
301
code de réponse si la ressource a en effet déplacé de façon permanente. Encore une fois, cela dépend si votre application a besoin d'utiliser les paramètres de chaîne de requête. Si vous utilisez une redirection permanente d'un navigateur (qui respecte la301
code de réponse) va sauter le chargement d'une URL comme .../par défaut.aspx?utm_source=twitter&utm_medium=médias sociaux et de la charge .../par défaut.aspx - vous ne serez jamais à même de connaître les paramètres de chaîne de requête.Enfin, vous pouvez utiliser
POST
demandes de méthode. Cela vous donne des URLs propres et vous permet de passer des paramètres dans, mais ne fonctionne qu'avec<form>
éléments ou demandes que vous créez à l'aide de JavaScript.Prendre un coup d'oeil à la UriBuilder classe. Vous pouvez en créer un avec une chaîne d'url, et l'objet sera alors analyser cette url et vous permettent d'accéder simplement les éléments que vous désirez.
Après avoir terminé le traitement dont vous avez besoin à voir sur la chaîne de requête, juste diviser l'url sur le point d'interrogation:
Accordé, ma solution est dans VB.NET mais j'imagine qu'il pourrait être porté sur assez facilement. Et puisque nous en sommes seulement à la recherche pour le premier élément de la scission, il a même "ne" normalement quand il n'y a pas de chaîne de requête.