web-dev-qa-db-fra.com

Obtenez l'URL de demande complète, y compris les paramètres dans le contrôleur

Comment puis-je obtenir l'URL de demande complè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é this question, mais cela ne semble pas être applicable à MVC.

Corrige moi si je me trompe.

Quelques informations plus détaillées:

Mon appel à ma SearchController.AdvancedSearch() provient d'un formulaire avec environ 15 paramètres facultatifs. En raison du nombre de paramètres et de l'absence de moyen possible (je pense) de faire passer les paramètres facultatifs de manière propre, j'ai opté 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 afin que lorsque l'on clique sur la miette, le même résultat exact puisse être récupéré (avec tous, mais pas plus, des arguments inclus). Pour ce faire, j'ai besoin de l'intégralité de request.URL, , y compris la chaîne de requête .

Dans Request.RawURL, request.URL etc cette chaîne de requête n'est pas incluse. En fait, actuellement, je fais une fonction simple.

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 cela moins un hack laid, veuillez le dire.

Je sais où trouver la demande 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 bit aussi.

Mon contrôleur met à jour une collection d'URL dans mon composant BreadCrumb. Il a donc besoin de l'URL de demande. Comment proposez-vous que je prenne ce problème?

34
Boris Callens

Vous pouvez utiliser Request.Url.PathAndQuery .

MVC5: utilisez Request.RequestUri.PathAndQuery

44
Serhiy
HttpContext.Current.Request.RawUrl
HttpContext.Current.Request.QueryString

En ce qui concerne votre deuxième question. Au lieu de suivre les URL, les informations sur les chaînes de requête, etc., vers lesquelles votre utilisateur est allé. Suivez les contrôleurs et les actions appelées. Cela supprimerait complètement le besoin de l'objet Request.

23
Jeff Sheldon

Vous pouvez accéder à l'objet Request actuel en utilisant:

HttpContext.Current.Request

Cependant, je dois demander - pourquoi voulez-vous l'URL de demande? 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.

2
Roger Lipscombe
Request.RawUrl

Utilisez cette propriété pour renvoyer l'url.

2
Dino Liu

Dans le contrôleur, vous pouvez accéder à Request.RawUrl.

0
Haacked