[译] 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开发的 ...
随机推荐
- [转]oracle EBS 基础100问
from:http://www.cnblogs.com/xiaoL/p/3593691.html http://f.dataguru.cn/thread-51057-1-1.html 1001 OR ...
- poj 3692 二分图最大匹配
思路: 如果我们将认识的建边,求最大独立集就是互相不认识的人数.那么我们反过来,将不认识的建图,求最大独立集就是互相认识的人数. #include<cstdio> #include< ...
- org.json 使用
org.json 和 json-lib 使用上差不多. //JSONObject public static void main(String[] args) { String jsonObjectS ...
- CSS3秘笈第三版涵盖HTML5学习笔记9~12章
第9章,装饰网站导航 限制访问,处于隐私方面考虑,浏览器已经开始限制可以对伪类:visited应用哪些CSS属性了.其中包括对已访问过的链接定义color.background-color.borde ...
- HDU(搜索专题) 1000 N皇后问题(深度优先搜索DFS)解题报告
前几天一直在忙一些事情,所以一直没来得及开始这个搜索专题的训练,今天做了下这个专题的第一题,皇后问题在我没有开始接受Axie的算法低强度训练前,就早有耳闻了,但一直不知道是什么类型的题目,今天一看,原 ...
- jQuery 的插件 dataTables
---恢复内容开始--- jQuery 的插件 dataTables 是一个优秀的表格插件,提供了针对表格的排序.浏览器分页.服务器分页.筛选.格式化等功能.dataTables 的网站上也提供了大量 ...
- ecshop调用文章显示上一篇下一篇
首先调用文章中的上一篇和下一篇语法为: 代码如下 复制代码 上一篇:<a href="{$next_article.url}">{$next_article.titl ...
- 使用gulp脚本配合TypeScript开发
目标:编写TypeScript时,保存即生成js文件. 使用npm安装以下组件 gulp gulp-rename through-gulp gulp-typescript 编写gulpfile ...
- 更换免开发证书账号出现的Your build settings specify a provisioning profile with the UUID"",however,no such provisioning profile was found
更换了免费的个人开发者账号后会出现这个错误 解决方法:在Finder中右键打开工程文件(显示包内容),用文本编辑器打开后缀名为.pbxproj的文件,command+f 搜索"PROVISI ...
- iOS动画——文字晃动
比如密码错误提示,需要文字左右晃动几次,以起到警示的作用. 为了调用使用方便,做一个分类.代码如下: .h文件 #import <QuartzCore/QuartzCore.h> @int ...