澄清ASP.NET生命周期事件的顺序

澄清ASP.NET生命周期事件的顺序,asp.net,asp.net-mvc-3,events,authentication,iis-7,Asp.net,Asp.net Mvc 3,Events,Authentication,Iis 7,我发现了一篇MSDN文章,这可能是我在网上看到的最有帮助的文章。但它提出了有关身份验证的有趣问题 表单身份验证在管道中很早就显示为“正在执行”。“执行”处理程序,如ASP.NET MVC路由和控制器执行,将在后面显示。但ASP.NET MVC的身份验证故事通常如下所示: public ViewResult Login(LoginModel login) { if (ModelState.IsValid) { if (Membership.ValidateUser(

我发现了一篇MSDN文章,这可能是我在网上看到的最有帮助的文章。但它提出了有关身份验证的有趣问题

表单身份验证在管道中很早就显示为“正在执行”。“执行”处理程序,如ASP.NET MVC路由和控制器执行,将在后面显示。但ASP.NET MVC的身份验证故事通常如下所示:

public ViewResult Login(LoginModel login)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(...)){
            FormsAuthentication.SetAuthCookie(...);
        }
    }
    //...
}
上面的代码表明,(表单)身份验证发生在“执行”处理程序阶段,而不是更早的“身份验证”IIS阶段

有人能澄清一下这种表面上的谨慎吗

我自己的猜测是,如果我没有配置成员资格提供程序,IIS“身份验证”阶段将在指定时执行FormsAuthenticate.Authorize(…)。但是,如果我配置自己的成员资格提供程序,那么IIS“身份验证”阶段实际上什么也不做,而是等待“执行”阶段,以便我自己的身份验证代码可以执行

如果我的猜测是正确的,那么如果我配置了自己的成员资格提供程序,这意味着“获取状态”IIS阶段也不会按预期运行:它还不会“看到”会话建立,因为只有在我在MVC控制器内完成身份验证步骤后,会话才会建立。或者,可能与“身份验证”和“获取状态”相关的应用程序事件将“延迟”,并且在我的控制器执行其身份验证代码之前不会引发


是吗?没有?

这里发生了两件不同的事情,令人困惑是可以理解的

  • 正如您所了解的,表单身份验证模块运行得很早。但该模块主要是关于查看表单验证cookie并确定其真实性,以及如果它是真实的,那么为ASP.NET设置正确的身份主体
  • 您通常在MVC项目中看到的身份验证代码是关于用户登录的,如果凭据正确,它会将表单身份验证的cookie设置为稍后的处理