2

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

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

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

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

所以我很好奇,当请求未通过身份验证时,主页面没有重定向到登录页面的原因是什么?

4

5 回答 5

3

如果您只想将 FormsAuthentication 重定向到登录页面,那么当用户尚未登录时,为什么不使用配置文件来执行此操作?

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

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

于 2012-12-05T16:27:44.057 回答
2

您是否尝试过调试 - 您的母版页的 Page_Load 是否确实在运行?您可能将 AutoEventWireUp 设置为 false 或类似...

于 2012-12-05T16:21:37.147 回答
2

我认为您需要查看母版页的生命周期;通过这个你可以了解它是如何工作的。

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

相关问题:ASP.NET WebForm 的“页面生命周期”是什么?

于 2012-12-05T16:25:45.920 回答
1

当您在多个地方需要相同的功能时,您可以使用ASP.NET 用户控件

将您的代码放入usercontrol并将用户控件添加到您需要执行此代码的页面

于 2012-12-05T16:15:03.440 回答
1

我不知道为什么你的代码不起作用,它对我来说很完美。你可以检查你的web.config,你是否实现了登录页面的url

<authentication mode="Forms">
      <forms loginUrl="~/Login.aspx" timeout="2880" defaultUrl="~/somepage.aspx" />
    </authentication>
于 2013-04-10T04:13:53.297 回答