Я думаю, что нужно опускать "~ /" и заменить его просто "/", я считаю/это корень
СТОП ПРЯМО ТАМ! :-), если вы не хотите жестко настроить свое веб-приложение, чтобы его можно было установить только в корневом каталоге веб-сайта.
«~ /» является нужная вещь для использования, но причина того, что ваш исходный код не работает, как ожидалось, что 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));
Использование имени сервера проблематично, так как, вероятно, сайт может использовать собственный DNS. Наличие протокола hardcoded как «http» также вызовет проблемы для сайтов с использованием https. – 2016-06-07 19:15:04