Ich glaube, Sie müssen die "~ /" fallen zu lassen und ersetzen Sie es mit nur "/", glaube ich,/ist die Wurzel
STOPP GENAU DA! :-) Es sei denn, Sie möchten Ihre Web-App so programmieren, dass sie nur im Stammverzeichnis einer Website installiert werden kann.
„~ /“ ist die richtige Sache zu verwenden, aber der Grund, dass Ihre ursprüngliche Code funktioniert nicht wie erwartet, dass ResolveUrl
(die von Redirect
intern verwendet wird) versucht zunächst, zu arbeiten, wenn die Pfad, den Sie übergeben, ist eine absolute URL (zB "** http://server/ ** foo/bar.htm" im Gegensatz zu "foo/bar.htm") - aber leider tut es dies, indem Sie einfach nach einem Doppelpunkt suchen ':' in der URL gibst du es. Aber in diesem Fall findet es einen Doppelpunkt in der URL, die Sie in dem ReturnPath
Query-String-Wert angeben, der es täuscht - daher wird Ihr '~ /' nicht aufgelöst.
Der Fix ist, dass Sie URL-Codierung der ReturnPath
Wert sein sollte, die die problematische ":" zusammen mit anderen Sonderzeichen entkommt.
Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));
Außerdem empfehle ich, dass Sie (oder jemand) nie Uri.ToString
verwenden - weil sie eine menschenlesbare gibt, mehr „freundliche“ Version der URL - nicht unbedingt richtig ein (es demaskiert Dinge). Stattdessen Uri.AbsoluteUri verwenden - etwa so:
Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));
Mit dem Servername problematisch ist, wie es ist wahrscheinlich, dass die Website eine benutzerdefinierte DNS nutzen könnte. Wenn das Protokoll als "http" fest codiert wäre, würden auch Probleme bei Websites auftreten, die HTTPS verwenden. –