1>HttpContext 是什么?
在用.NET构建的服务器中,当有用户通过get/post方式提交Http请求时.我们就使用 HttpContext 对用户的请求进行处理.
2>HttpContext.Current的实质?
System.Runtime.Remoting.Messaging.CallContext.HostContext as HttpContext;(获取或设置与当前线程相关联的主机上下文。)
关键字 关联当前线程
当用户提交http请求,.NET会专门申请一个线程来处理这个请求 . 也就是在这个线程所执行到的程序中 .Current 都会返回相同的主机上下文.
ps:如果存在,不在当前线程的代码块.Current无法找到匹配的上下文.
1. 定时器的回调。
2. Cache的移除通知。
3. APM模式下异步完成回调。
4. 主动创建线程或者将任务交给线程池来执行。
这几种情况都会脱离http请求处理的线程,导致..Current 的返回值 为null
如果必须使用异步方法脱离线程,有保证HttpContext 的有效性,可以将HttpContext 以参数的形式传入.
3>HttpContext 怎样切入?
利用.NET建立 XXX.ashx文件 public void ProcessRequest (HttpContext context)
在函数体中就可以利用 HttpContext 处理 用户的请求
4>HttpContext 能做些什么?
--1.(HttpRequest )request 请求
--2..HttpRequest .(NameValueCollection)Params 请求参数
--3..HttpRequest .(HttpFileCollection)Files 请求文件集合 .[index] HttpPostedFile 文件
--4.(HttpResponse) Response 处理请求
--5(HttpServerUtility) Server服务器端处理