ibcadmin 发表于 2019-11-8 09:52:26

Asp.net HttpContext 简介

<strong>1.Context    名词分析</strong>
   Context 直接翻译就是上下文。"上下文" 这个名词还是挺让人费解的,是一个非常泛化的概念。刚看到有点让人摸不着头脑,一个高端大气上档次的名词,如果要找一个雷同的表明可以是我们读文章会用到的语境。
      我们讲个“语境” 与“上下文”的例子,大概可以资助明确。比如“他是背着包袱脱离家的,”“包袱”在这内里有点歧义。 这句话可以明确为“他背着一包东西脱离了家”,也可以说“他带着头脑负担脱离了家”,在这里词语“包袱”只有借助特定的语境才华确定其真正寄义。 那么我们在 web 中经常利用到的Session , 也是如许的, 单单给你一个Session,你是没有办法知道详细的寄义的,每个哀求过来的 Session大概都会不一样,大概有些内里就没有值,只有在运行时每一次哀求上下文中我们获取的这个Session的值才是故意义的。

<strong>2.   HttpContext的简单先容</strong>
      起首我们来看一下这个类的定义,这内里只是截取了部分,标红的是我们经常用到的,有些是每一次哀求必须要用到的,既然我用了哀求这个词,那就是对应的 HttpRquest。有哀求就会有返回,这个就是HttpReponse。
   
<img src="https://www.cnblogs.com/file:///C:/Users/THINKPAD/AppData/Local/YNote/data/qqF2AF36A26544D122E96EACAA317ABDDC/06cf5deb44a8467eb8f6bbe85c4904ae/clipboard.png"data-attr-org-src-id="0EBBF904ECB54EDD813F5FDDA6535E65" data-media-type="image" />

我们起首看一下 定名空间 System.Web,这个只要稍微知道一下,偶尔我们要用一个 api 经常不知道它所在的定名空间。

<strong>HttpRequest 的定义</strong>

<img src="https://www.cnblogs.com/file:///C:/Users/THINKPAD/AppData/Local/YNote/data/qqF2AF36A26544D122E96EACAA317ABDDC/93d8ebbc248a4d508f8aaaf53ee4d16e/clipboard.png"data-attr-org-src-id="FDB52DBEA0494CD6B183F8D0FEB96E8D" data-media-type="image" />
这个是与哀求有关的全部参数,看这个紧张是相识 Request 的大概内容。 如果你要获取一个跟欣赏器有关的信息,比如cookie 的值,那你应该从这个地方来找一下有没有,如果连这个地方都没有,那很大大概性,你是没有办法得到的。固然 cookie这边是有的。再看一下QuertString上面 有详细的利用方法,这些方法不是我本身写上去的,是api内里自带的,告诉你怎么利用的,这些关注一下,可以加深你对一个api的影象。 当你不知道一个api怎么用的时间,先去定义内里看一下关于这个api的各种信息,内里总归有一个是得当你的,如果着实找不到,可以思量一下你要找的信息是不是在其他api内里,与HttpRequest 有关吗,比如你要指定返复书息的字符集,那应该到 HttpReponse 内里去找,我们不能用一个化学方程式来办理一个牛顿力学题目,不外好像如今大部分汽车的能量来源是化石燃料,化学方程式大概也可以处理惩罚物理题目。

<strong>HttpReponse 的定义</strong>

<img src="https://www.cnblogs.com/file:///C:/Users/THINKPAD/AppData/Local/YNote/data/qqF2AF36A26544D122E96EACAA317ABDDC/3de1423d6d604e7998c69042d714d50f/clipboard.png"data-attr-org-src-id="07736E05AA3F4A03BDF4184CFDD51EA9" data-media-type="image" />
这个是与返回有关的全部参数,如果你要指定返回的字符集,那你可以指定Charset。

<img src="https://www.cnblogs.com/file:///C:/Users/THINKPAD/AppData/Local/YNote/data/qqF2AF36A26544D122E96EACAA317ABDDC/710524471ff946c697c7d31aec5ce59d/clipboard.png"data-attr-org-src-id="91D8CF86D27B4459BF1E6D7B5650C06C" data-media-type="image" />

我们发现HttpReponse内里也有一个 Cookies,那么这个 Cookies 和 HttpRequest是同一个吗?如果你有答案了可以验证一下。
var requestCookie = HttpContext.Current.Request.Cookies;
var reponseCookie = HttpContext.Current.Response.Cookies;
var b = requestCookie.Equals(reponseCookie);

<strong>3 .HttpContext 总结</strong>
       通过上面的两个例子,给我们的感觉 Context 有点像一个堆栈,我们须要什么就可以去内里拿,如果在这内里也找不到.,那其他地方就很难再找到了。下面我们重新熟悉一下HttpContext。
      HttpContext 就是关于 Http哀求过程中涉及到的全部变量大概引用存放的一个堆栈。 雷同的我们还有 DbContext, ApplicationContext 。在这内里我们提到了“上下文”、“堆栈” 这些名词,在这篇文章的边界之内,指代的就是 Context 这个概念。

<strong>4.   小思考</strong>
       既然我们知道了这些,那就给你出个小标题呗,如果要获取用户的 IP 那应该从哪里去找,大概偶尔间获取的值跟你想象的不一样,应用服务器前面有了一层反向署理服务器比如 Nginx , 会不会影响我们这种方式取IP所在呢,这时我们该怎么办。

这内里涉及到一个小定义
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的哀求端真实的IP,只有在通过了HTTP 署理大概负载平衡服务器时才会添加该项。它不是RFC中定义的尺度哀求头信息,在squid缓存署理服务器开发文档中可以找到该项的详细先容。尺度格式如下:X-Forwarded-For: client1, proxy1, proxy2
var headers = HttpContext.Current.Request.Headers;
var forward = headers["X-Forwarded-For"];
forward 记录完备的署理链路。
<p></p>
页: [1]
查看完整版本: Asp.net HttpContext 简介