Obtenir l'url de la requête complète, y compris les paramètres dans le contrôleur
Comment puis-je obtenir l'URL complète de la requête (y compris la chaîne de requête) dans mon contrôleur? S'agit-il de concaténer mes paramètres D'URL et de formulaire ou Existe-t-il un meilleur moyen?
J'ai vérifié cette question , mais elle ne semble pas être applicable à MVC.
Corrigez-moi si je me trompe.
Quelques informations plus détaillées:
Mon appel à mon SearchController.AdvancedSearch()
provient d'un formulaire avec environ 15 paramètres optionnels. En raison du nombre de paramètres et aucun moyen possible (je pense) pour avoir des paramètres optionnels passés de manière propre, je suis allé pour une chaîne catchall qui est gérée dans le contrôleur.
Maintenant, je veux que mon contrôleur stocke son appel dans un composant de fil d'Ariane de sorte que lorsque la miette est cliquée, le même résultat peut être récupéré (avec tous, mais pas plus, des arguments inclus). Pour ce faire, j'ai besoin de toute la demande.URL, y compris la chaîne de requête.
Dans Request.RawURL
, request.URL
etc cette chaîne de requête n'est pas inclus. En fait actuellement je fais une plaine fonction.
String.Format("{0}/{1}", request.Url, request.form)
Cela me donne des résultats étranges (comme soumettre des valeurs de bouton, etc.), mais cela fonctionne. S'il y a des suggestions sur la façon de rendre ce hack moins laid, veuillez le dire.
Je sais où trouver la requête actuelle, mais je n'arrive pas à trouver une URL brute n'importe où. Ils sont tous privés de la chaîne de requête et j'ai besoin de ce peu aussi.
Mon contrôleur met à jour une collection D'URL dans mon composant BreadCrumb
. Par conséquent, il a besoin de l'URL de la requête. Comment me suggérez vous prendre sur ce problème?
5 réponses
Vous pouvez utiliser Request.Url.PathAndQuery
.
MVC5: utiliser demande.RequestUri.PathAndQuery
HttpContext.Current.Request.RawUrl
HttpContext.Current.Request.QueryString
En ce qui concerne votre deuxième question. Au lieu de suivre les url, les informations de chaîne de requête, etc., que votre utilisateur est allé à. Suivre les contrôleurs et actions. Cela supprimerait entièrement le besoin de L'objet Request.
Vous pouvez obtenir l'objet de requête en cours en utilisant:
HttpContext.Current.Request
Cependant, je dois demander -- pourquoi voulez-vous l'URL de la requête? En faisant cela, vous avez rendu votre contrôleur dépendant de L'objet Request, ce qui rendra vos tests unitaires beaucoup plus difficiles à écrire.
Request.RawUrl
Utilisez cette propriété est de retourner l'url all.