(Ceci est une question plus étroite)
dans mon action ASP.NET MVC, je cherche si la valeur de retour de retour est dans l'URL. P>
Mon URL ressemble à ceci: p >
public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); // some stuff string loginUrl = FormsAuthentication.LoginUrl + "/user/settings; context.Response.Redirect(loginUrl); }
4 Réponses :
Essayez de déboguer le code - Vous devriez pouvoir voir dans le débogueur toute la liste des paramètres QueryString, vous pouvez donc voir si vous manquez-l'épellé-l'orthographié. P>
Ma collection de QueryString est vide, mais je peux voir le? Returaliser = / utilisateur / paramètres dans l'URL.
Pouvez-vous obtenir la chaîne de demande.rawurl et vérifiez que la demande dispose de l'URL complète avec la chaîne de requête?
La demande.rawurl n'a pas le querystring. Très étrange, l'URL dans le navigateur ??
Il suffit de courir dans un problème similaire moi-même.
Demande.Rawurl est correct, l'URL soumise au navigateur manque au QueryString. Vérifiez la source de vue de la page et vérifiez l'URL de l'attribut Action de votre élément de formulaire. Vous trouverez probablement le querystring manque. P>
Qu'est-ce qui se passe probablement est que vous utilisez une surcharge de @ html.beginform qui prend le paramètre Routevalues. L'utilisation de toute surcharge avec "routévalues" générera une nouvelle URL de routage et transmettra tous les paramètres de QueryString. Dans mon cas, je voulais ajouter l'attribut ENCTYPE et la seule surcharge nécessite des routées à spécifier. Je suppose que c'est une surveillance en MVC 3. P>
Cependant, vous pouvez toujours écrire votre propre formulaire balise à l'ancienne. En regardant le code source du MVC 3, il apparaît que la surcharge de base pour HTML.Beginform utilise la demande.Rawurl. P>
Essayez ce qui suit: p>
<form action="@Request.RawUrl" method="post" enctype="multipart/form-data">
J'ai eu un problème similaire que le développeur Novice ASP.NET MVC. Le problème était un formulaire de connexion qui postait le formulaire à son contrôleur spécifique. Donc, les valeurs de chaîne de requête manquantes sont très normales. Parce que l'attribut d'action de formulaire est comme Action = "/ Index / Login"
La solution que j'ai appliquée consiste à ajouter un champ masqué à mon formulaire avec valeur de la chaîne de requête. Cela doit être ajouté en tant que paramètre sur l'actionResult ou le modèle. P>
@using (Html.BeginForm("login", "contr", new {returnUrl = Request.QueryString["returnUrl"]})
J'ai rencontré ce problème moi-même et j'ai eu des difficultés à identifier la solution la plus optimale, alors je pensais ajouter ma brève expérience à la conversation.
en mode de débogage, j'ai fait défiler toutes les propriétés de la demande ; Dans mon cas, j'ai trouvé la valeur de QueryString que je cherchais dans httpcontext.request.urlreferrer.Query code>. La raison de cela semble être que j'avais cliqué sur un
html.actionLink code> de la page qui possédait cette valeur de QueryString, et qui m'a poussé à un
MVC code> gestionnaire - Ce qui est traité techniquement comme une page séparée (avec son propre nouveau
httpcontext code>), même s'il ne représente pas comme tel sur l'URL du navigateur pendant le débogage. P> < p> Des recherches supplémentaires semblent suggérer que la solution em> préférée de Microsoft à ce sujet consiste à simplement réussir votre valeur dans la chaîne lorsque vous appelez le gestionnaire ... mais la syntaxe pour que cela se produise n'est peut-être pas aussi clair comme cela devrait être. Au lieu de cela, l'analyse de votre valeur du
URLREFERRER code> semble fonctionner simplement bien, même si elle prend une ou deux lignes de code supplémentaires pour atteindre votre valeur. Par exemple, le scénario de cas le plus basique avec une valeur unique passée sur le querystring pourrait ressembler à ceci: p>
Je viens de courir un test rapide et cela a bien fonctionné pour moi. Utilisez-vous des gestionnaires HTTP personnalisés ou similaires?
Jetez un coup d'œil à cela aussi: Stackoverflow.com/Questtions/1783059/...
@jacerhea J'ai un filtre personnalisé qui fait la redirection de la page de connexion. Voir ma mise à jour ci-dessus
Utilisez quelque chose comme Firebug pour vérifier quelle est la vraie demande que votre demande reçoive; Peut-être que c'est le navigateur qui affiche une URL et en utilise un autre?
Vous n'avez pas besoin
! = Null code> dans votre code. Si la requête.Quiserystring [] est null, il retournera 0 i.e faux.