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. 解决真机编译出现System.DllNotFoundException: 'libmono-native.so'错误都方法

    1.去掉勾选:使用共享运行时 2 检查android SDK是否安装了NDK 3.使用真机运行编译APK

  2. Vue中computed和watch的区别

    在vue中computed和watch的真正区别是:computed产生于它的依赖,而watch产生于它的依赖的变化.只要依赖存在,我们就能访问到其对应的computed属性:但只有依赖发生了改变,我 ...

  3. JavaScript继承的最初设想

    JavaScript没有真正的类(class)和实例(instance),而是靠一种奇特的原型链模式,来实现继承. 在Brendan Eich设计之初,Javascript里面都是对象,必须有一种机制 ...

  4. [Go] gocron源码阅读-判断是否使用root用户执行

    判断是linux系统,并且uid为0,allowRoot是通过命令行传参传进来的,通过flag包解析出来的,可以使用go run node.go -h看到这些参数 && !allowR ...

  5. [日常] gocron源码阅读-使用go mod管理依赖源码启动gocron

    从 Go1.11 开始,golang 官方支持了新的依赖管理工具go modgo mod download: 下载依赖的 module 到本地 cachego mod edit: 编辑 go.modg ...

  6. [视频教程] ubuntu系统下以守护进程方式安装使用Redis

    直接访问redis的中国官网,在下载部分,可以看到安装和使用的方式.wget http://download.redis.io/releases/redis-5.0.4.tar.gztar xzf r ...

  7. 动态链接库(Dynamic Link Library)

    DLL INTRODUCTION A DLL is a library that contains code and data that can be used by more than one pr ...

  8. mybatis与hibernate的区别持久层对比【面试题】

    Mybatis技术特点: 好处: 通过直接编写SQL语句,可以直接对SQL进行性能的优化: 学习门槛低,学习成本低.只要有SQL基础,就可以学习mybatis,而且很容易上手: 由于直接编写SQL语句 ...

  9. 泛型T

    作用: 使用泛型类型可以最大限度地重用代码.保护类型的安全以及提高性能. 泛型最常见的用途是创建集合类 1.性能:如List<object> 与 List<T> 将一个 int ...

  10. 1.web2

    听说聪明的人都能找到答案http://123.206.87.240:8002/web2/ 直接查看源码~~~