本文为盗,(原文链接)
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 请求
- UserHostAddress 客户端主机的IP地址 x.x.x.x:x
- Url 请求服务器完整链接地址 x.x.x.x:x/a/b.ashx
- Url .Authority 主机端口 x.x.x.x:x
- Url .Host 主机 x.x.x.x
- Url .Port 端口 x.x.x.x
- PhysicalApplicationPath 请求服务器文件目录 D:/c/a/b/.ashx
- Path 相对路径 /a/b.ashx
--2..HttpRequest .(NameValueCollection)Params 请求参数
- Get();获取指定名称的参数 get/post
--3..HttpRequest .(HttpFileCollection)Files 请求文件集合 .[index] HttpPostedFile 文件
- HttpPostedFile.ContentLength 文件大小
- HttpPostedFile.ContentType 文件类型
- HttpPostedFile.FileName 文件名
- HttpPostedFile.InputStream 文件数据流
- HttpPostedFile SaveAs(string filename) 保存方法
--4.(HttpResponse) Response 处理请求
- Redirect(string url) 通知客户端,跳转请求链接 以http://开头,为完全使用一个新的地址链接,否则视为使用行对路径
- Write(string str) 以字符串的形式返回数据
- WriteFile(string fileName) 以文件数据的形式返回数据
- 以上都是.NET封装好的易用方法,如果需要定制需求可以根据HttpResponse流属性和方法,生成更加具体的返回结果
--5(HttpServerUtility) Server服务器端处理
- MachineName 服务器主机名
- MapPath(string path) 将可识别路径转变为服务器的物理路径(常用)
- Execute(string path) 执行path对应路径下的文件,执行外返回调用出
- Transfer(string path) 跳转路径,不通知客户端
- UrlEncode,UrlDecode,HtmlEncode,HtmlDecode 对字符串进行转码,解码的工具方法