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");конечно работает

Другие вопросы по тегам