Подтвердить что ты не робот

Response.Redirect с использованием ~ Path

У меня есть метод, когда я хочу перенаправить пользователя обратно на страницу входа, расположенную в корне моего веб-приложения.

Я использую следующий код:

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

Это не работает. Мое предположение заключалось в том, что ASP.NET автоматически разрешит URL-адрес в правильный путь. Обычно я просто использовал

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

но этот код находится на главной странице и может выполняться с любого уровня папки. Как мне решить эту проблему?

4b9b3361

Ответ 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));

Ответ 2

Как насчет использования

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));