Warum Verlangen.QueryString["ReturnUrl"] NULL zurückgeben, auch wenn es in der URL vorhanden?
(Dies ist eine eher schmale Frage)
In meinem asp.net MVC action, ich bin auf der Suche, wenn die ReturnUrl-Wert in der URL.
Meine Url sieht wie folgt aus:
http://localhost:56112/user/login?ReturnUrl=/user/settings
In meinem handeln, ich bin auf der Suche, wenn das querystring-Wert existiert, und es ist NULL zurückgeben?? Wie kann das sein?
Code:
if(Request.QueryString["ReturnUrl"] != null)
{
}
Verfolgung durch die Anwendung, es ist einfach das überspringen der if-Anweisung den Körper, d.h. Sie ist NULL.
Wie können diese erklärt werden?
Update
In der Steuerung, die prüft, ob der Benutzer angemeldet hat, ich habe einen ActionFilter, dass sieht aus wie:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
//some stuff
string loginUrl = FormsAuthentication.LoginUrl + "/user/settings;
context.Response.Redirect(loginUrl);
}
- Ich lief nur ein kurzer test, und es funktionierte gut für mich. Sind Sie mit einer benutzerdefinierten http-Handler oder ähnliches?
- Werfen Sie einen Blick auf dies auch: stackoverflow.com/questions/1783059/...
- Ich habe einen benutzerdefinierten filter, die nicht die Umleitung auf die login-Seite. siehe mein update oben
- Verwenden Sie so etwas wie FireBug um zu überprüfen, was das eigentliche Anliegen, dass Ihre Anwendung zu bekommen; vielleicht ist es der browser, der zeigt eine URL an und verwendet eine andere?
- Sie brauchen nicht
!= null
im code. wenn die Anfrage.QueryString[] null ist, wird 0 zurück ich.e FALSCH .
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, Debuggen des Codes - Sie sollten in der Lage sein, um zu sehen, in der debugger die gesamte Liste der QueryString-Parameter, so dass Sie sehen können, wenn Sie miss-Dinkel es.
Gerade lief in ein ähnliches Problem mich.
Anfrage.RawUrl korrekt ist, wird die angemeldete url an den browser an fehlt der QueryString. Überprüfen Sie den Quelltext für die Seite, und überprüfen Sie die url auf das action-Attribut des form-Elements. Du wirst wahrscheinlich feststellen, der QueryString ist, fehlt.
Was wahrscheinlich passiert ist, dass Sie eine überlastung von @Html.BeginForm, die den routeValues parameter. Mit einer überladung mit "routeValues" erstellen einer neuen routing-URL und Streifen beliebiger querystring-Parameter. In meinem Fall, wollte ich hinzufügen, das enctype-Attribut und das nur überlastung erfordert routeValues angegeben werden. Ich nehme an, es ist ein versehen in MVC 3.
Jedoch können Sie immer noch schreiben Sie Ihre eigenen Formular-tag die altmodische Art und Weise. Blick auf den source-code für MVC 3, es scheint, dass die Basis überlast für Html.BeginForm Anfrage verwendet.RawUrl.
Versuchen Sie Folgendes:
Traf ich dieses problem selbst und hatte einige Schwierigkeiten, die Ermittlung der optimalen Lösung, so dass ich dachte, ich würde meine kurze Erfahrung zum Gespräch.
Im debug-Modus habe ich nach unten gescrollt durch alle Eigenschaften der Anfrage, in meinem Fall, fand ich die QueryString-Wert suchte ich in
HttpContext.Request.UrlReferrer.Query
. Der Grund dafür scheint zu sein, dass hatte ich klickte auf einHtml.ActionLink
von der Seite, die im Besitz, der QueryString-Wert, und schob mich zu einem MVC -ActionResult
handler -- der ist technisch behandelt, als eine separate Seite (mit seiner eigenen neu definiertenHttpContext
), obwohl es darstellen nicht als solche auf die URL in den browser, während Sie gerade Debuggen.Weitere Forschung scheint darauf hinzudeuten, dass Microsoft am günstigsten gelegene Lösung für dieses Problem ist einfach übergeben Sie Ihre Wert von bis die Kette beim Aufruf der handler... aber die syntax für die Herstellung dieses geschehen ist vielleicht nicht so klar ist, wie es sein sollte. Anstelle von, dass, analysieren Ihren Wert aus der
UrlReferrer
scheint zu funktionieren ganz gut, auch wenn es dauert eine oder zwei Zeilen extra-code zu erreichen, die Ihrem Wert. Zum Beispiel, die meisten basic-case-Szenario mit einem einzelnen übergebenen Wert auf dem QueryString könnte in etwa so Aussehen:Ich hatte ein ähnliches problem als Anfänger Asp.Net MVC developer. Das problem war, ein login-Formular wurde die Buchung der form seiner spezifischen controller. So fehlt query-string-Werte sind ganz normal. Weil form-action-Attribut ist wie action="/index/login"
Die Lösung, die ich angewendet wird, um ein hidden-Feld auf meinem Formular mit dem Wert aus dem query-string. Dies muss Hinzugefügt werden, als parameter an die ActionResult oder das Modell.
Andere Lösung ist, um es zu übergeben, um die form action url wie: