1.  Context    名词解析
     Context 直接翻译就是上下文。"上下文" 这个名词还是挺让人费解的,是一个非常泛化的概念。刚看到有点让人摸不着头脑,一个高端大气上档次的名词,如果要找一个类似的解释可以是我们读文章会用到的语境。
        我们讲个“语境” 与“上下文”的例子,可能可以帮助理解。比如“他是背着包袱离开家的,”“包袱”在这里面有点歧义。 这句话可以理解为“他背着一包东西离开了家”,也可以说“他带着思想负担离开了家”,在这里词语“包袱”只有借助特定的语境才能确定其真正含义。 那么我们在 web 中经常使用到的Session , 也是这样的, 单单给你一个Session,你是没有办法知道具体的含义的,每个请求过来的 Session可能都会不一样,可能有些里面就没有值,只有在运行时每一次请求上下文中我们获取的这个Session的值才是有意义的。
 
2.   HttpContext  的简单介绍
      首先我们来看一下这个类的定义,这里面只是截取了部分,标红的是我们经常用到的,有些是每一次请求必须要用到的,既然我用了请求这个词,那就是对应的 HttpRquest。有请求就会有返回,这个就是HttpReponse。
     
 
我们首先看一下 命名空间 System.Web,这个只要稍微知道一下,有时我们要用一个 api 经常不知道它所在的命名空间。
 
HttpRequest 的定义
这个是与请求有关的所有参数,看这个主要是了解 Request 的大概内容。 如果你要获取一个跟浏览器有关的信息,比如cookie 的值,那你应该从这个地方来找一下有没有,如果连这个地方都没有,那很大可能性,你是没有办法得到的。当然 cookie这边是有的。再看一下QuertString上面 有具体的使用方法,这些方法不是我自己写上去的,是api里面自带的,告诉你怎么使用的,这些关注一下,可以加深你对一个api的记忆。 当你不知道一个api怎么用的时候,先去定义里面看一下关于这个api的各种信息,里面总归有一个是适合你的,如果实在找不到,可以考虑一下你要找的信息是不是在其他api里面,与HttpRequest 有关吗,比如你要指定返回信息的字符集,那应该到 HttpReponse 里面去找,我们不能用一个化学方程式来解决一个牛顿力学问题,不过好像现在大部分汽车的能量来源是化石燃料,化学方程式可能也可以处理物理问题。
 
HttpReponse 的定义
这个是与返回有关的所有参数,如果你要指定返回的字符集,那你可以指定  Charset。
 
我们发现HttpReponse里面也有一个 Cookies,那么这个 Cookies 和 HttpRequest  是同一个吗?如果你有答案了可以验证一下。
var requestCookie = HttpContext.Current.Request.Cookies;
var reponseCookie = HttpContext.Current.Response.Cookies;
var b = requestCookie.Equals(reponseCookie);
 
3 .  HttpContext 总结
       通过上面的两个例子,给我们的感觉 Context 有点像一个仓库,我们需要什么就可以去里面拿,如果在这里面也找不到.,那其他地方就很难再找到了。下面我们重新认识一下HttpContext。
        HttpContext 就是关于 Http请求过程中涉及到的所有变量或者引用存放的一个仓库。 类似的我们还有 DbContext, ApplicationContext 。在这里面我们提到了  “上下文”、“仓库” 这些名词,在这篇文章的边界之内,指代的就是 Context 这个概念。
 
4.   小思考
       既然我们知道了这些,那就给你出个小题目呗,如果要获取用户的 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 记录完整的代理链路。

Asp.net HttpContext 简介的更多相关文章

  1. 解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介

    ASP.NET 5简介 ASP.NET 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦.为了这些改写,微软也是蛮 拼的,几乎把.NET Framwrok全部改写了一遍,形成了一 ...

  2. 第一章ASP.NET SignalR简介

    第一章ASP.NET SignalR简介 1.1概述: ASP.NET SignalR是微软新开发的类库,为的是帮助ASP.NET开发人员很方便地开发实时网络功能. SignalR允许服务器端和客户端 ...

  3. ASP.NET 5简介

    ASP.NET 5简介 解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介 2015-05-13 09:14 by 汤姆大叔, 3379 阅读, 39 评论, 收藏, 编辑 ...

  4. 酷学习笔记——ASP.NET Core 简介

    ASP.NET Core 简介 其实就是说酷好,不好好学,不学好,没饭吃. 新词汇:IoT,Internet of Things,网联网,微软物联网英文网站.微软物联网中文网站

  5. ASP.NET Razor 简介

    ylbtech-.NET: ASP.NET Razor 简介 Razor 不是一种编程语言.它是服务器端的标记语言. 1. 什么是 Razor?返回顶部 Razor 是一种标记语法,可以让您将基于服务 ...

  6. [翻译] ASP.NET Core 简介

    ASP.NET Core 简介 原文地址:Introduction to ASP.NET Core         译文地址:asp.net core 简介           翻译:ganqiyin ...

  7. [中文翻译] ASP.NET 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)

    本文出处  [中文翻译] ASP.NET 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23) 这是我的文章备份 http://www.dotblogs.co ...

  8. ASP.NET Core 简介 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 简介 - ASP.NET Core 基础教程 - 简单教程,简单编程 ← ASP.NET Core 基础教程 ASP.NET Core Windows 环境配置 → A ...

  9. [转帖]2016年的文章: 解读ASP.NET 5 & MVC6系列教程(1):ASP.NET 5简介

    解读ASP.NET 5 & MVC6系列教程(1):ASP.NET 5简介 更新时间:2016年06月23日 11:38:00   作者:汤姆大叔    我要评论 https://www.jb ...

随机推荐

  1. 这篇文章带你彻底理解synchronized

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  2. Http协议(自己的一些小小的总结,方便日后学习揣摩)

    从2019年6月中旬开始学习JAVA已经差不多6个月了,也算是差不多半只脚踏进了JAVA的大门,没有老师带,遇到问题就要自己查百度,搜博客,去给各个大佬私信留言,也不知道看不看的见. 看了很多大佬的视 ...

  3. 树莓派4B到货开箱体验

    树莓派4B到货开箱体验 实不相瞒,喜欢这块板已经很久了,但是国内4GB内存的版本始终没货,.....等等等,终于到货了,迅雷不及眼耳之势赶紧下单...购买点亮开发板所需要的物件 顺便看到一个好看的外壳 ...

  4. DevExpress的分页Tab控件XtraTabControl控件的使用

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  5. 用canvas画一个时钟

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 我写了个项目,帮你学习HTTP接口测试!

    端午节我写了一个项目,帮助你学习HTTP接口测试. GitHub地址: https://github.com/defnngj/learning-API-test 整个项目基于Flask和 Reques ...

  7. 6.JavaCC官方入门指南-例1

    例1:整数加法运算   在这个例子中,我们将判断如下输入的式子是否是一个合法的加法运算: 99 + 42 + 0 + 15   并且在输入上面式子的时候,数字与加号之间的任何位置,都是可以有空格或者换 ...

  8. Python—编码与解码(encode()和decode())

    编码与解码 decode英文意思是解码,encode英文原意是编码. Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化.编码是 unicode -> str ...

  9. [PHP] error_reporting(0)可以屏蔽Fatal error错误

    按照以前的印象,error_reporting(0)屏蔽不了php的Fatal error级别的错误.但是今天我遇到了一个问题才发现,它竟然可以屏蔽任何错误,包括Fatal error,浏览器会看不到 ...

  10. [视频教程] redis中的bit运用统计用户在线天数

    位运算在redis中非常的方便使用,并且理由利用这个可以实现很多特殊的功能.这也迫使我去研究更多的redis提供的函数,只有研究的多,思路才能够更加开放.今天我就对strings下面的几个函数进行了测 ...