Frage

Ich habe eine Methode, bei der ich den Benutzer zurück zu einer Anmeldeseite im Stammverzeichnis meiner Webanwendung umleiten möchte.

Ich verwende den folgenden Code:

Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString());

Das funktioniert allerdings nicht.Ich ging davon aus, dass ASP.NET die URL automatisch in den richtigen Pfad auflösen würde.Normalerweise würde ich einfach verwenden

Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString());

Dieser Code befindet sich jedoch auf einer Masterseite und kann von jeder Ordnerebene aus ausgeführt werden.Wie kann ich dieses Problem umgehen?

War es hilfreich?

Lösung

Ich denke, Sie müssen das „~/“ weglassen und es einfach durch „/“ ersetzen, ich glaube, / ist der Stamm

STOPPEN SIE GENAU! :-) es sei denn, Sie möchten Ihre Web-App fest codieren, sodass sie nur im Stammverzeichnis einer Website installiert werden kann.

"~/" Ist das Richtige, aber der Grund dafür, dass Ihr ursprünglicher Code nicht wie erwartet funktioniert hat, ist folgender ResolveUrl (die intern verwendet wird von Redirect) versucht zunächst herauszufinden, ob der von Ihnen übergebene Pfad eine absolute URL ist (z. B.„**http://server/**foo/bar.htm“ im Gegensatz zu „foo/bar.htm“) – aber leider geschieht dies, indem einfach nach einem Doppelpunkt „:“ in der von Ihnen angegebenen URL gesucht wird.In diesem Fall wird jedoch ein Doppelpunkt in der von Ihnen angegebenen URL gefunden ReturnPath Abfragezeichenfolgenwert, der es täuscht – daher wird Ihr „~/“ nicht aufgelöst.

Die Lösung besteht darin, dass Sie die URL-Codierung vornehmen sollten ReturnPath Wert, der dem problematischen „:“ zusammen mit anderen Sonderzeichen entgeht.

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));

Darüber hinaus empfehle ich Ihnen (oder irgendjemandem), es niemals zu verwenden Uri.ToString - weil es eine für Menschen lesbare, „freundlichere“ Version der URL liefert – nicht unbedingt eine korrekte (sie entgeht Dingen).Verwenden Sie stattdessen Uri.AbsoluteUri – etwa so:

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));

Andere Tipps

Sie können die URL erste Antwort beheben. REDirect ("~/login.aspx);und fügen Sie die Parameter hinzu, nachdem es gelöst wurde.

Wie wäre es mit der Verwendung?

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top