zoukankan      html  css  js  c++  java
  • System.Web.UI.Page类的构造函数的执行时机

    这篇Blog来自一位同事和我的一次关于公司一个项目中的一个错误的讨论。错误非常简单,就是当在一个页面的构造函数中使用类似:

    Session[“aaa”] = “bbb”;

    的时候,就会抛出异常,说系统中Session没有被enable,所以不能使用(当然实际情况是肯定被enable了)。问题所在和解决方法也很快被找到了,在构造函数中不能使用Session的,将这个移到Page_Init中就OK了。

    这个错误的根本原因应该是在页面的构造函数被调用时,ASP.NET引擎中负责处理Session的SessionStateModule中相应初始化Session的代码还没有被执行,所以才导致了那时不能访问当前上下文的Session信息。

    SessionStateModule在其Init方法中,是在HttpApplication的AcquireRequestState事件(更确切说,应该是通过使用AddOnAcquireRequestStateAsync()方法,来进行异步的事件处理)上注册了相应的方法,来完成初始化HttpSessionState对象,并将其赋值给当前的HttpContext的Session属性,而在HttpApplication的AcquireRequestState事件被调用的时候,页面对象已经被创建了,就是说,页面的构造函数的执行是在AcquireRequestState事件被调用之前,所以在页面构造函数中访问Session当然会引发相应的异常。

    HttpApplication的确切执行顺序是:

    BeginRequest -> AuthenticateRequest -> AuthorizeRequest -> ResolveRequestCache -> 构建页面(在这里页面构造函数被调用) -> AcquireRequestState(这里才初始化当前上下文的Session) -> PreRequestHandlerExecute -> 进入页面执行生命周期(开始Page_Init) -> PostRequestHandlerExecute -> ReleaseRequestState -> UpdateRequestCache -> EndRequest
  • 相关阅读:
    cookie加载不正确的问题
    android多图选择器 图片/视频 单选or多选,以及视频录制。
    Android开发之高仿微信图片选择器
    Glide升级到4.x版本遇到的问题
    v关于使用Glide加载图片失败时显示自己特定的图片
    Java的方法类型
    Java二维数组的应用
    Java中字符串操作的基本方法总结:
    Java冒泡排序
    报错:flutter: Another exception was thrown: Could not find a generator for route RouteSettings
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436795.html
Copyright © 2011-2022 走看看