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?
Vous pouvez utiliser Request.Url.PathAndQuery
.
MVC5: utilisez Request.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 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.
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.
Request.RawUrl
Utilisez cette propriété pour renvoyer l'url.
Dans le contrôleur, vous pouvez accéder à Request.RawUrl
.