Ответ 1
Я думаю, вам нужно сбросить "~/" и заменить его "/", я верю/является корнем
STOP RIGHT THERE!:-), если вы не хотите жестко настроить свое веб-приложение, чтобы его можно было установить только в корневом каталоге веб-сайта.
"~/" - это правильная вещь для использования, но причина, по которой ваш исходный код не работал должным образом, заключается в том, что ResolveUrl
(который используется внутри Redirect
) пытается если вы пройдете маршрут, это абсолютный URL (например, "** http://server/ ** foo/bar.htm" в отличие от "foo/bar.htm" ), но, к сожалению, он делает это, просто ища символ двоеточия: "в URL-адресе, который вы ему даете. Но в этом случае он находит двоеточие в URL-адресе, указанном в строковом значении ReturnPath
, которое его обманывает, поэтому ваш `~/'не будет разрешен.
Исправление состоит в том, что вы должны быть URL-кодированием значения ReturnPath
, которое ускользает от проблемного: "вместе с любыми другими специальными символами.
Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));
Кроме того, я рекомендую, чтобы вы (или кто-либо) никогда не использовали Uri.ToString
- потому что он дает удобочитаемую, более "дружественную" версию URL-адреса, не обязательно правильную (она не отменяет вещи). Вместо этого используйте Uri.AbsoluteUri - например:
Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));