ASP.NET - 检查请求是否在母版页中进行了身份验证

时间:2012-12-05 16:10:38

标签: c# asp.net authentication forms-authentication

在我的母版页的Page_Load事件中,我有以下代码:

if(!Request.IsAuthenticated)
{
   FormsAuthentication.RedirectToLoginPage();
} else 
{
   // Do something. Note: Any work here gets performed when request is authenticated.
}

但是,当我在未经过身份验证的情况下加载内容页面(使用主服务器)时,我不会被重定向到登录页面。为了获得所需的行为,我还需要在我的内容页面的Page_Load事件中添加上述检查。

这不是一个大问题,但只是烦恼在每个内容页面上进行上述检查。

所以我很好奇,当请求未经过身份验证时,母版页不会重定向到登录页面的原因是什么?

5 个答案:

答案 0 :(得分:3)

如果你想要的只是FormsAuthentication重定向到登录页面,当用户没有登录时为什么不使用配置文件来执行此操作?

<system.web>
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

这应该会自动将所有“匿名”用户发送到FormAuth的已配置登录页面。

答案 1 :(得分:2)

您是否尝试过调试此问题 - 您的母版页Page_Load肯定在运行吗? 您可能将AutoEventWireUp设置为false或类似...

答案 2 :(得分:2)

我认为你需要看life cycle of Master page;通过这个你可以理解它是如何工作的。

首先运行单个.aspx页面的Page_Load()方法,然后在执行该方法后,运行母版页的Page_Load()方法。

相关问题:What is the 'page lifecycle' of an ASP.NET WebForm?

答案 3 :(得分:1)

如果您需要在多个地方使用相同的功能,则可以使用ASP.NET User Controls

将您的代码放在usercontrol中,并将usercontrol添加到您需要执行此代码的页面

答案 4 :(得分:1)

我不知道为什么你的代码不起作用,它与我完美配合。 您可以签入您的web.config,是否实现了登录页面的URL

<authentication mode="Forms">
      <forms loginUrl="~/Login.aspx" timeout="2880" defaultUrl="~/somepage.aspx" />
    </authentication>