[译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)
使用 HttpRequest 对象
HttpRequest 对象描述的是一个正在被处理的 HTTP 请求。下表列举了 HttpRequest 中的属性,它们提供了当前请求的相关信息(HttpRequest 类定义了一些方法和属性,我们会逐步讲解当中的一些属性)。
表 1 – HttpRequest 类中属性
名称 | 描述 |
AcceptTypes | 返回一个可以被浏览器接受的 MIME 类型的字符串数组。 |
Browser | 返回一个可以用来描述浏览器功能的 HttpBrowserCapabilities 对象。 |
ContentEncoding | 返回一个 System.Text.Encoding 对象,用来描述对请求数据进行编码的字符集。 |
ContentLength | 返回请求内容的字节数。 |
ContentType | 返回请求中内容的 MIME 类型。 |
CurrentExecutionFilePathExtension | 返回请求的 URL 文件扩展组件。 |
Headers | 返回一个包含请求头的集合。 |
HttpMethod | 返回发起请求的 HTTP 方法(GET, POST, 等等)。 |
InputStream | 返回一个可以读取请求内容的流。 |
IsLocal | 如果请求源自本机,那么返回 true。 |
MapPath(path) | 将项目中的文件名转换成绝对路径。 |
RawUrl | 返回紧跟着主机名的那部分 URL。换句话说,比如,http://apress.com:80/books/Default.aspx,那么这个属性就会返回 /books/Default.aspx。 |
RequestContext | 返回一个请求上下文对象用来提供获取一个请求的路由信息。 |
Url | 返回一个 System.Uri 对象用来表示请求 URL。 |
UrlReferrer | 返回一个 System.Uri 对象用来表示访问来源 URL。 |
UserAgent | 返回浏览器提供的 user-agent 字符串。 |
UserHostAddress | 返回远程客户端的 IP 地址,用一个字符串表示。 |
UserHostName | 返回远程客户端的 DNS 名称。 |
UserLanguages | 返回一个字符串数组表示浏览器/用户偏好的语言。 |
为了阐述 HttpRequest 类的使用,我已经修改了 Index.cshtml 文件,用来显示一些请求属性。
@using SimpleApp.Models
@model List<string> @{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Vote</title>
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
</head>
<body class="container">
<div class="panel panel-primary">
@if (ViewBag.SelectedColor == null)
{
<h4 class="panel-heading">Vote for your favourite color</h4>
}
else
{
<h4 class="panel-heading">Change your vote from @ViewBag.SelectedColor</h4>
} <div class="panel-body">
@using (Html.BeginForm())
{
@Html.DropDownList("color", new SelectList(Enum.GetValues(typeof(Color))), "Change a Color", new { @class = "form-control" }) <div>
<button class="btn btn-primary center-block" type="submit">Vote</button>
</div>
}
</div>
</div> <div class="panel panel-primary">
<h5 class="panel-heading">Results</h5>
<table class="table table-condensed table-striped">
<tr><th>Color</th><th>Votes</th></tr>
@foreach (Color c in Enum.GetValues(typeof(Color)))
{
<tr>
<td>@c</td>
<td>@Votes.GetVotes(c)</td>
</tr>
}
</table>
</div> <div class="panel panel-primary">
<h5 class="panel-heading">Request Properties</h5>
<table class="table table-condensed table-striped">
<tr><th>Property</th><th>Value</th></tr>
<tr><td>HttpMethod</td><td>@Request.HttpMethod</td></tr>
<tr><td>IsLocal</td><td>@Request.IsLocal</td></tr>
<tr><td>RawURL</td><td>@Request.RawUrl</td></tr>
</table>
</div>
</body>
</html>
HttpRequest 对象使用得很频繁以致一些应用组件,包括 Razor 视图,都提供了方便的属性,这样我们就不需要为了获取一个 HttpRequest 实例而动用 HttpContext 对象。下表总结了可以获取到 HttpRequest 对象的方便属性:
表 2 - 在不同的 ASP.NET/MVC 组件中获取一个 HttpRequest 对象
组件 | 技术 |
Controller | 使用方便的 Request 属性。 |
View | 使用方便的 Request 属性。 |
全局应用类 | 使用方便的 Request 属性。 |
模块 | 没有方便的属性可用。使用 HttpContext.Request 属性。 |
处理器 | 没有方便的属性可用。使用 HttpContext.Request 属性。 |
全局 | 总是可以通过静态的 HttpContext.Current.Request 属性获取到 HttpRequest 对象。 |
图 1 - 展示请求的详细信息
除了表 1 中提到的属性,一个请求中还包括了其他的属性来获取数据。我在下表列举了出来,但是因为模型绑定的缘故,它们不直接在 MVC controllers 中使用,这在 Pro ASP.NET MVC 5 中讲到过。然而,这些属性也有时候在模块中使用到。
表 3 – HttpRequest 类中定义的额外属性
名称 | 描述 |
Files | 返回一个浏览器表单中发送的文件集合。 |
Form | 提供对原始表单数据的访问。 |
Params | 一个来自查询字符串,表单字段,和 cookies 的组合数据项集合。也可以直接在 HttpRequest 对象上使用一个类数组的索引,比如 Request[“myname”] 和 Request.Params[“myname”] 是等同的。 |
QueryString | 返回一个查询字符串参数的集合;这个属性通常不直接在 MVC 应用中使用。 |
[根据 Adam Freeman – Pro ASP.NET MVC 5 Platform 选译]
[译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)的更多相关文章
- [译] ASP.NET 生命周期 – ASP.NET 应用生命周期(一)
概述 ASP.NET 平台定义了两个非常重要的生命周期.第一个是 应用生命周期 (application life cycle),用来追踪应用从启动的那一刻到终止的那一刻.另一个就是 请求生命周期 ...
- [译] ASP.NET 生命周期 – ASP.NET 上下文对象(五)
ASP.NET 上下文对象 ASP.NET 提供了一系列对象用来给当前请求,将要返回到客户端的响应,以及 Web 应用本身提供上下文信息.间接的,这些上下文对象也可以用来回去核心 ASP.NET 框架 ...
- [译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)
使用 HttpApplication 对象 ASP.NET 框架中的许多类都提供了许多很方便的属性可以直接映射到 HttpContext 类中定义的属性.这种交叠有一个很好的例子就是 HttpAppl ...
- [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(三)
使用特殊方法处理请求生命周期事件 为了在全局应用类中处理这些事件,我们会创建一个名称以 Application_ 开头,以事件名称结尾的方法,比如 Application_BeginRequest.举 ...
- [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(四)
不使用特殊方法来处理请求生命周期事件 HttpApplication 类是全局应用类的基类,定义了可以直接使用的一般 C# 事件.那么使用标准 C# 事件还是特殊方法那就是个人偏好的问题了,如果喜欢, ...
- [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(二)
ASP.NET 请求生命周期 全局应用类也可以用来跟踪每个独立请求的生命周期,包括请求从 ASP.NET 平台传递到 MVC 框架.ASP.NET 框架会创建一个定义在 Global.asax 文件中 ...
- [译] ASP.NET 生命周期 – ASP.NET 上下文对象(八)
使用 HttpResponse 对象 HttpResponse 对象是与 HttpRequest 对象相对应的,用来表示构建中的响应.它当中提供了方法和属性可供我们自定义响应,有一些在使用 MVC 视 ...
- Asp.net生命周期与Http协议
Http协议,底层的东西还是不是特别熟悉,感觉要经过沉淀之后才能理解这些东西吧 1.Asp.net生命周期 Asp.net生命周期: 从发起请求开始,到IIS进行处理的全部过程,然后再到获取结果 当请 ...
- Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用
一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...
随机推荐
- 最短路径之Dijkstra算法及实例分析
Dijkstra算法迪科斯彻算法 Dijkstra算法描述为:假设用带权邻接矩阵来表示带权有向图.首先引进一个辅助向量D,它的每个分量D[i]表示当前所找到的从始点v到每个终点Vi的最短路径.它的初始 ...
- linux上传下载
linux传下载 1.可以通过xftp连接服务器直接 拖拽 2.yum install lrzsz 通过rz/sz命令上传下载
- 1172 Hankson 的趣味题
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Descrip ...
- 如何通过PhpMyAdmin批量删除MYSQL数据库数据表
使用这个方法前,强烈建议先备份整个数据库.至于怎么备份?你不会么?在本文下方留言吧. 具体方法:复制下面的php执行语句,保存为sql.php文件(注意配置数据库名称.密码.数据表头),通过ftp上传 ...
- Ehcache(2.9.x) - API Developer Guide, Cache Eviction Algorithms
About Cache Eviction Algorithms A cache eviction algorithm is a way of deciding which element to evi ...
- oracle trunc 函数处理日期格式
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; --显示当前时间 2011-12-29 16:24:34 select trun ...
- 第六十三篇、runtime实现归解档
#import <objc/runtime.h> #import <objc/message.h> @implementation HDFArchiveModel - (voi ...
- js 验证电话号 座机及手机号
function CheckTel() { /*验证电话号码 验证规则:区号+号码,区号以0开头,3位或4位号码由7位或8位数字组成 区号与号码之间可以无连接符,也可以“-”连接 如010888888 ...
- 【转】C#绝对新手之C#中的多线程小结
大概有4种方法: Dispatcher.异步委托.手动多线程.BackgroundWorker,另外还有一个DispatcherTimer,是定时器. 其中Dispatcher与DispatcherT ...
- linux ubuntu vsftp 默认主目录
vi /etc/passwd 查看/ftp: 后面的目录就是默认目录 这是匿名用户的目录 --------------------------- 使用linux 别的用户,默认在/home/用户名 ...