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. export default和export的使用

    export default和export都是用来向外暴露成员 export default 向外暴露的成员可以使用任意的变量来接收,在一个模块中,export default只允许向外暴露一次,可以 ...

  2. NumPy实现数组的拼接和分裂

    一.数组的拼接 import numpy as np x=np.array([,,]) x2=np.array([,,])np.concatenate([x,x2]) 输出:array([1, 2, ...

  3. SparkStreaming 整合kafka Demo

    这里使用的是低级API,因为高级API非常不好用,需要繁琐的配置,也不够自动化,却和低级API的效果一样,所以这里以低级API做演示 你得有zookeeper和kafka 我这里是3台节点主机 架构图 ...

  4. Mysql中 instr与concat

    #INSTR(字符串, 子串),#返回值:第一个子串的索引-1#类似indexOf()#例如:SELECT INSTR('人民万岁,世界万岁','万')SELECT INSTR('人民万岁,世界万岁' ...

  5. 如何将MagicaVoxel模型导入UE4中(1)

    前言 当初在选择自己项目的美术风格时,由于自己的美术基础实在是太差,所以选择了体素风格来构建(其实还是MagicaVoxel的建模操作很容易上手),但是将自己千辛万苦做好的模型导入至项目中时,出现了这 ...

  6. 初学JavaScript正则表达式(十)

    前瞻与后顾 断言 === assert 符合断言为正向,不符合为负向 例 'a2*3'.replace(/\w(?=\d)/g,'x') ------- x2*3 看看'\d'前面是不是'\w',如果 ...

  7. vue高频面试题(面试路上踩过的坑)

    ### Vue 双向绑定原理 mvvm 双向绑定,采用**数据劫持结合发布者-订阅者模式**的方式,通过 `Object.defineProperty()` 来劫持各个属性的 setter.gette ...

  8. go 创建切片

    package main import "fmt" func main() { //自动推导类型,同时进行初始化 s1 := [],,,} fmt.Println("s1 ...

  9. Exception "java.lang.ClassNotFoundException: com/intellij/codeInsight/editorActions/FoldingData"while constructing DataFlavor for: application/x-java-jvm-local-objectref; class=com.intellij.codeInsigh

    java.lang.​ClassNotFo​undExcepti​on in matlabR2014a 就是MATLAB和pycharm不能同时运行.关闭pycharm然后打开MATLAB就可以了.

  10. 9.29 csp-s模拟测试55 联+赛+题

    T1 联 $n$最大到$1e18$,根本没法做,但$m$只有$1e5$,发现有很多区间是一起动的,或者根本没动,所以可以把区间离散化掉,然后线段树区间修改,对于第三种修改,只需要把它分解成一段一段相同 ...