Я думаю, вам нужно отбросить "~ /" и заменить его просто "/", я считаю / это корень
ОСТАНОВИТЕСЬ ПРАВИЛЬНО! :-), если вы не хотите жестко закодировать свое веб-приложение, чтобы оно могло быть установлено только в корне веб-сайта.
"~ /" - это правильная вещь для использования, но причина того, что ваш исходный код не работал должным образом, заключается в том, что 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));