Response.Redirect() для перенаправления на страницу в подпапке
Я использую Response.Redirect("login.aspx");
Так как я переехал login.aspx
к моему Account
В подпапке я попробовал следующий код, однако он не работает.
Response.Redirect("Account/login.aspx");
URL, который пытается перенаправить на это:
http://localhost/BuzzEnhance/Account/Login.aspx
Полный код:
public partial class BuzzMaster : MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["Username"] != null)
{
username.Text = Session["Username"].ToString();
}
else
{
Response.Redirect("Account/Login.aspx");
}
}
}
}
и еще одна вещь - и страница по умолчанию, и страница входа в систему используют одну и ту же главную страницу.
6 ответов
Ваша проблема в том, что вы делаете перенаправление из MasterPage и используете относительный путь.
Когда вы используете относительный путь, он будет относиться к местоположению страницы содержимого, которая связана с главной страницей, а не относительно местоположения главной страницы.
Ваше перенаправление на:
/BuzzEnhance/Account/Account/Login.aspx
почти наверняка приходит со страницы содержимого в папке "Учетная запись", которая связана с вашей главной страницей. Например, если ваша страница входа в систему (/BuzzEnhance/Account/Login.aspx) сама привязана к этой главной странице, она будет перенаправлена на относительный путь Account/Login.aspx
, который разрешит /BuzzEnhance/Account/Account/Login.aspx
именно то, что вы видите.
Лучшее решение в ответе @abatishchev - использовать путь относительно корня приложения ~/Account/Login.aspx
,
Однако это создаст вам еще одну проблему, если, как я подозреваю, ваша страница Login.aspx привязана к той же главной странице. Каждый раз, когда вы обращаетесь к Login.aspx, он выполняет код перенаправления на главной странице, что приводит к бесконечному циклу, пока не истечет время ожидания.
Одним из решений является либо избежать привязки вашей страницы Login.aspx к этой главной странице, либо добавить некоторый условный код, чтобы вы не перенаправляли на страницу Login.aspx.
Хотя даже лучше, вам вообще не нужно делать перенаправление, если вы используете проверку подлинности с помощью форм и оставляете ее для управления перенаправлением на страницу входа стандартным способом. Если вы хотите отобразить имя пользователя, вы можете использовать HttpContext.Current.User.Identity.Name
- или используйте один из элементов управления входом ASP.NET: LoginStatus
, LoginName
...
"~/Account/Login.aspx"
дам
"<app root>/Account/Login.aspx"
так что если корень ваших приложений
http://localhost/BuzzEnhance
указанный относительный путь будет расширен до
http://localhost/BuzzEnhance/Account/Login.aspx
Кроме того, если вы используете проверку подлинности с помощью форм, вы можете использовать
FormsAuthentication.RedirectToLoginPage();
см MSDN.
Прежде всего, его нет responce.redirect("page.aspx");
его Response.Redirect("Page.aspx");
Попробуйте, таким образом, это будет работать. По вашему вопросу его Response.Redirect("folder/page.aspx");
попробуйте сейчас, я буду ждать.
Имейте в виду, что в C# первая буква должна быть заглавной.
Что вам нужно, это:
Response.Redirect("/Account/Login.aspx");
Это пойдет на Account
которые находятся внутри корня и там, чтобы Login.aspx
стр.
Попробуй это
Response.Redirect(this.ResolveClientUrl("~/Account/Login.aspx");
ОП говорит
«С тех пор, как я переместил свой
login.aspx
к моему
Account
подпапку, я попробовал следующий код, но он не работает».
Есть еще один случай, который может вызвать определенное поведение. в
web.config
у вас могут быть разрешенные местоположения. И пока вы не откроете одно такое место, которое вы добавили, вы не будете перенаправлены туда.
<location path="Account/login.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
Как только выше ^^ установлен, это
Response.Redirect("~/Account/login.aspx");
конечно работает