zoukankan      html  css  js  c++  java
  • 应用程序对象

    上下文对象HttpContext
      为了进一步简化服务器端对参数的处理工作,ASP.NET中定义了HttpContext类型来统一处理参数的表示问题
      底层方法:
        RewritePath 将服务器收到的请求URL替换为另一个指定的URL (可以做地址的映射)
        GetSection 获取配置文件中的配置节
        RemapHandler 重新设置当前的处理程序
    应用程序对象 HttpApplication
      当HttpContext对象创建之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication
        HttpRuntime通过HttpApplictionFactory维护一个HttpApplication对象池,使得对象可以重复利用,但每个对象每次仅仅用于处理一个请求
        在HttpApplication中,利用.NET的事件机制,通过在处理过程中依次触发的多个事件,将这个处理过程分解为多个步骤,这个处理机制通常我们称为处理管道
    管道
      就是处理复杂问题的时候,将处理的过程分解为多个处理步骤,我们将这种经过多个步骤的处理方式称为处理管道
      自定义处理管道:
        继承自System.ComponentModel.Component
          有一个Events集合管理

    简单的例子:

      class Handler:Component
        {
            private static readonly object startEvent = new object();
            private static readonly object stopEvent = new object();
    
    
            public event EventHandler StartProcess
            {
                add { this.Events.AddHandler(startEvent, value); }
                remove { this.Events.RemoveHandler(startEvent, value); }
            }
            public event EventHandler StopProcess
            {
                add { this.Events.AddHandler(stopEvent, value); }
                remove { this.Events.RemoveHandler(stopEvent, value); }
            }
            protected void OnStartProcess(EventArgs e)
            {
                if (this.Events[startEvent]!=null)
                {
                    ((EventHandler)this.Events[startEvent])(this, e);
                }
            }
            protected void OnStopProcess(EventArgs e)
            {
                if (this.Events[stopEvent] != null)
                {
                    ((EventHandler)this.Events[stopEvent])(this, e);
                }
            }
             public void Process()
            {
                OnStartProcess(EventArgs.Empty);
                OnStopProcess(EventArgs.Empty);
            }
        }
            static void Main(string[] args)
            {
                Handler h = new Handler();
                h.StartProcess += h_StartProcess;
                h.StopProcess += h_StopProcess;
                h.Process();
                Console.Read();
            }
    
            static void h_StopProcess(object sender, EventArgs e)
            {
                Console.WriteLine("停止处理......");
            }
            static void h_StartProcess(object sender, EventArgs e)
            {
                Console.WriteLine("开始处理.....");
            }
        }

    HttpApplication 的处理管道
      基本的步骤是这样
        BeginRequest 处理的开始
        验证身份
        授权
        是否有缓冲
          如果有就直接跳到最后
          否则获取处理这个请求的Handler
        得到处理程序后,还不能马上执行,因为还有可能有客户上次的遗留数据,需要加载
          PreRequestHandlerExecute 表示马上就要执行这个处理程序了
        执行完处理程序后,释放掉之前用到的数据,如果还需要将这次处理的结果缓存起来,以便
        在后续的请求中可以直接使用这个结果,UpdateRequestCache事件提供了处理的机会
        EndRequest 请求结束
    HttpContext 状态管理
      因为HttpContext贯穿整个HttpApplication的处理过程中,所有可以使用Items属性来传递数据
    处理HttpApplication的事件
      注册HttpApplication对象的事件处理
        1.IHttpModule
        2.global.asax
      在global.asax中可以注册一些通过特殊的命名规则定义的方法
        1.Application_HttpModule中的方法
        2.满足System.EventHandler
        3.必须为public
    文件上传问题
      可以设置文件的最大长度(KB)默认是保存在内存中的....
        <httpRuntime maxRequestLength=" "/>
        如果是大文件的话,可以使用requestLengthDiskThreshold属性设置条件

    Hold on, everything is possible.
  • 相关阅读:
    2020年12月18日
    2020年12月17日
    2020年12月16日
    2020年12月15日
    2020年12月14日
    排序算法总结
    2020微软笔试题
    子串、子序列问题
    剑指offer题解(完结)
    ONOS 2.2安装
  • 原文地址:https://www.cnblogs.com/student-note/p/6136205.html
Copyright © 2011-2022 走看看