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
RequestContext
返回一个请求上下文对象用来提供获取一个请求的路由信息。
Url
返回一个 System.Uri 对象用来表示请求 URL。
UrlReferrer
返回一个 System.Uri 对象用来表示访问来源 URL。
UserAgent
返回浏览器提供的 user-agent 字符串。
UserHostAddress
返回远程客户端的 IP 地址,用一个字符串表示。
UserHostName
返回远程客户端的 DNS 名称。
UserLanguages
返回一个字符串数组表示浏览器/用户偏好的语言。
为了阐述 HttpRequest 类的使用,我已经修改了 Index.cshtml 文件,用来显示一些请求属性。
View Code
HttpRequest 对象使用得很频繁以致一些应用组件,包括 Razor 视图,都提供了方便的属性,这样我们就不需要为了获取一个 HttpRequest 实例而动用 HttpContext 对象。下表总结了可以获取到 HttpRequest 对象的方便属性:
表 2 - 在不同的 ASP.NET/MVC 组件中获取一个 HttpRequest 对象
组件
技术
Controller
使用方便的 Request 属性。
View
全局应用类
模块
没有方便的属性可用。使用 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 选译]