C# HttpContext(盗)

本文为盗,(原文链接)

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 对字符串进行转码,解码的工具方法

C# HttpContext(盗)

上一篇:二进制部署K8s集群第7节Master节点之kube-apiserver集群部署


下一篇:NX二次开发-C#创建XML和解析XML