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. 织梦DEDECMS本地后台操作卡顿的解决方法

    打开/data/common.inc.php,把默认的$cfg_dbhost = ‘localhost‘修改为$cfg_dbhost = ‘127.0.0.1’;保存.然后你会发现后台操作起来流畅多了 ...

  2. DevExpress的TextEdit控件没法调整高度解决

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

  3. WebService 接收JSON字符串

    晚上学习时公司的同事,暂且叫A吧,A:“我们公司XXX纺织的AM接口不通,让我看下”,我:“接口写的不是有AJAX异步请求的示例嘛,参考下,我都测试过接口,都是通的.”,A:“我走的不是AJAX,走的 ...

  4. HTML颜色名称大全

    所有浏览器支持的颜色名称,所有现代浏览器都支持以下140种颜色名称(单击颜色名称或十六进制值,以将颜色视为背景颜色以及不同的文本颜色): 有关HTML颜色的完整概述,请访问我们的颜色教程. 颜色名称 ...

  5. JavaScript之找LHS查询和RHS查询

    LHS和RHS,当变量出现在赋值操作的左侧时进行LHS 查询,出现在右侧时进行RHS 查询. LHS 查询是试图找到变量的容器本身,从而可以对其赋值. RHS 理解成retrieve his sour ...

  6. C# vs2017创建Com组件,并注册

    1.创建一个普通类库dll项目,如:MyCom. 2.导出接口,添加Guid,Guid为全局唯一标识,可以用VS2017自带工具获取.获取Guid的方法,如图: (1)打开自带Guid工具. (2)首 ...

  7. swift(四)swift的广义匹配

    //swift的广义匹配 let x = switch x { ...: println("个位数") ...: println("十位数") default: ...

  8. JSON解析(序列化和反序列化)

    JSON的序列化,代码示例: NSDictionary *dic = @{}; if (![NSJSONSerialization isValidJSONObject:dic]) { NSLog(@& ...

  9. [20190910]索引分支块中TERM使用什么字符表示.txt

    [20190910]索引分支块中TERM使用什么字符表示.txt --//做索引块转储,一些root,分支节点出现TERM,从来没有关注使用字符表示,简单探究看看. 1.环境:SCOTT@test01 ...

  10. cin.get()解密

    最近在使用cin.get()函数时遇到了一个迷惑行为,现已解开. 一.cin.get()的用法 char ch; ch = cin.get(); //第1种用法 cin.get(ch); //第2种用 ...