ASP.NET запуск страницы ‘Page_Load’ перед событием ‘Page_Load’ главной страницы?

#c# #asp.net

#c# #asp.net

Вопрос:

На моей главной странице у меня есть небольшой метод в Page_Load событии, который проверяет, вошел ли пользователь в систему, и перенаправляет их на страницу входа, если нет.

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

Какие есть способы обойти это? Какие-либо события, которые я могу использовать на своих страницах, кроме Page_Load, которые будут запускаться после главной страницы?

Комментарии:

1. Вы не используете проверку подлинности в формах? Вам нужно только указать loginUrl для автоматического перенаправления на ваш Login.aspx на любой странице, если пользователь не аутентифицирован или время сеанса истекло. msdn.microsoft.com/en-us/library /…

Ответ №1:

У вас богатый цикл страницы с большим количеством событий для использования. Возможно, вы могли бы использовать Page_Init для проверки, авторизован ли пользователь на главной странице. Или использовать Page_PreRender на других страницах.

Комментарии:

1. Фантастика — изменил проверку на Page_Init, и теперь она работает идеально. Спасибо!

Ответ №2:

Если вам нужно, чтобы что-то происходило в MasterPage Page_Load перед событиями страницы, используйте Page_PreRender

 protected void Page_PreRender(object sender, EventArgs e)
  

на самой странице.

Ответ №3:

Вам нужно будет проверить, авторизован ли пользователь для этих функций, выполнив: if (this.Page.User.Identity.IsAuthenticated == true) { .. } . Ничего нельзя предположить, с чем вы и сталкиваетесь. Вы также можете переместить проверку входа в систему в Page_Init или даже переместить ее в HTTP-модуль, который запускается при каждой загрузке страницы; там у вас есть доступ к широкому спектру событий, включая аутентификацию / авторизацию приложения.

Если вы используете аутентификацию в формах, вы можете использовать файл конфигурации для управления этим вместо этого, через элемент авторизации.

 <system.web>
  <authorization>
    <deny users="?" />
    <allow users="*" />
  </authorization>
</system.web>
<location path="login.aspx">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>
  

HTH.