【问题标题】:ASP.NET - Checking if request is authenticated in master pageASP.NET - 检查请求是否在母版页中经过身份验证
【发布时间】:2012-12-05 16:10:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


【解决方案1】:

如果你想要的只是 FormsAuthentication 重定向到登录页面,当用户没有登录时,你为什么不使用配置文件来做到这一点?

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

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

【讨论】:

  • 那,我的朋友,非常有帮助 :) 原来的问题仍然存在。
  • 谢谢! :) 我也无法弄清楚为什么该代码对您不起作用。我不认为它是 Load 事件的顺序,无论哪个先发生,重定向都应该起作用。我认为你给出的例子不足以说明这一点。
  • 这是一个经典的无用 SO 答案——技术上正确,但没有解决实际问题!在 web.config 中设置它是全局的。一个站点可以有多个母版页,因此客观上这不是这里所问问题的答案。有关实际解决方案,请参阅@Sagar 的答案
【解决方案2】:

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

【讨论】:

  • 我的母版页的 Page_Load 肯定正在运行,是的。我在“else”块中所做的任何事情都会被执行。条件之外的任何代码也是如此。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 2020-11-29
        • 2013-04-30
        相关资源
        最近更新 更多