处理Login.Authenticate事件
-
03-07-2019 - |
题
结果
A)预订I’从中学习说如果我们处理 Login.Authenticate 事件,那么我们必须自己对用户进行身份验证。因此,控制赢得了自动验证用户名和密码。我认为本书建议只有在我们覆盖 Login.OnAuthenticate()方法时才会发生这种情况,但即使只为 Authenticate 事件添加事件处理程序,也会出现自动身份验证没有发生。
但为什么呢?为什么事件处理不像 Init 或 Load 事件那样工作,你必须覆盖 Page.OnInit()和 Page.OnLoad()以获得对事件处理的控制权?
结果
B)我检查了MSDN网站,它基本上建议如果我们覆盖 Login.OnAuthenticate(),我们也应该调用 base.OnAuthenticate()。但是,为什么我们需要覆盖 Login.OnAuthenticate(),如果我们通过简单地为 Login.Authenticate 声明一个事件处理程序来获得相同的效果?
结果
感谢名单
解决方案
您不应该覆盖 <代码> OnAuthenticate 代码> 。此方法仅在内部用于引发 MembershipProvider 进行身份验证,则“> 验证
事件给已注册的处理程序。因此,要为 Login
控件实现自定义身份验证,只需为 Authenticate
事件注册一个处理程序,并设置 AuthenticateEventArgs.Authenticated
property。
Authenticate
事件的事件处理与其他事件完全相同。唯一的区别是 OnAuthenticate
方法有一些逻辑决定是否使用 MembershipProvider
或注册的事件处理程序进行身份验证。
如果你确实创建了 Login
的子类并覆盖 Login.OnAuthenticate
,那么调用 base.OnAuthenticate(...)
因为它包含调用已注册事件处理程序的逻辑。如果您不调用 base.Authenticate(...)
,则应自行调用已注册的事件处理程序。但是在您的情况下可能不需要创建 Login
的子类。