Вопрос

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

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

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

Однако это не сработает.Я предполагал, что ASP.NET автоматически преобразует URL-адрес в правильный путь.Обычно я бы просто использовал

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

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

Это было полезно?

Решение

Я думаю, вам нужно удалить "~ /" и заменить его просто "/", я считаю, что / - это корень

ОСТАНОВИСЬ ПРЯМО СЕЙЧАС! :-) если только вы не хотите жестко закодировать свое веб-приложение, чтобы его можно было устанавливать только в корневом каталоге веб-сайта.

"~/" является правильная вещь для использования, но причина, по которой ваш исходный код работал не так, как ожидалось, заключается в том, что 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));

Другие советы

сначала вы можете разрешить URL-адрес Ответ.Перенаправление("~/Login.aspx);и добавьте параметры после того, как проблема будет решена.

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

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top