• 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 对字符串进行转码,解码的工具方法
  • 相关阅读:
    泛型理解及应用(二):使用泛型编写通用型Dao层
    泛型的理解及应用(一):泛型擦除
    Servlet、Filter 生命周期
    Java多线程(六) 线程系列总结
    Java多线程(五) Lock接口,ReentranctLock,ReentrantReadWriteLock
    Java多线程(四) 线程池
    Java多线程(三) 多线程间的基本通信
    Java多线程(二) 多线程的锁机制
    Java多线程(一) 多线程的基本使用
    Spring Boot实战:模板引擎
  • 原文地址:https://www.cnblogs.com/wiggin-Z/p/13748578.html
Copyright © 2020-2023  润新知