[译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)

简介: 使用 HttpRequest 对象 HttpRequest 对象描述的是一个正在被处理的 HTTP 请求。下表列举了 HttpRequest 中的属性,它们提供了当前请求的相关信息(HttpRequest 类定义了一些方法和属性,我们会逐步讲解当中的一些属性)。

使用 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 文件,用来显示一些请求属性。

 1 @using SimpleApp.Models
 2 @model List<string>
 3 
 4 @{
 5     Layout = null;
 6 }
 7 
 8 <!DOCTYPE html>
 9 
10 <html>
11 <head>
12     <meta name="viewport" content="width=device-width" />
13     <title>Vote</title>
14     <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
15 </head>
16 <body class="container">
17     <div class="panel panel-primary">
18         @if (ViewBag.SelectedColor == null)
19         {
20             <h4 class="panel-heading">Vote for your favourite color</h4>
21         }
22         else
23         {
24             <h4 class="panel-heading">Change your vote from @ViewBag.SelectedColor</h4>
25         }
26 
27         <div class="panel-body">
28             @using (Html.BeginForm())
29             {
30                 @Html.DropDownList("color", new SelectList(Enum.GetValues(typeof(Color))), "Change a Color", new { @class = "form-control" })
31 
32                 <div>
33                     <button class="btn btn-primary center-block" type="submit">Vote</button>
34                 </div>
35             }
36         </div>
37     </div>
38 
39     <div class="panel panel-primary">
40         <h5 class="panel-heading">Results</h5>
41         <table class="table table-condensed table-striped">
42             <tr><th>Color</th><th>Votes</th></tr>
43             @foreach (Color c in Enum.GetValues(typeof(Color)))
44             {
45                 <tr>
46                     <td>@c</td>
47                     <td>@Votes.GetVotes(c)</td>
48                 </tr>
49             }
50         </table>
51     </div>
52 
53     <div class="panel panel-primary">
54         <h5 class="panel-heading">Request Properties</h5>
55         <table class="table table-condensed table-striped">
56             <tr><th>Property</th><th>Value</th></tr>
57             <tr><td>HttpMethod</td><td>@Request.HttpMethod</td></tr>
58             <tr><td>IsLocal</td><td>@Request.IsLocal</td></tr>
59             <tr><td>RawURL</td><td>@Request.RawUrl</td></tr>
60         </table>
61     </div>
62 </body>
63 </html>
View Code

HttpRequest 对象使用得很频繁以致一些应用组件,包括 Razor 视图,都提供了方便的属性,这样我们就不需要为了获取一个 HttpRequest 实例而动用 HttpContext 对象。下表总结了可以获取到 HttpRequest 对象的方便属性:

表 2 - 在不同的 ASP.NET/MVC 组件中获取一个 HttpRequest 对象

组件 技术
Controller 使用方便的 Request 属性。
View 使用方便的 Request 属性。
全局应用类 使用方便的 Request 属性。
模块 没有方便的属性可用。使用 HttpContext.Request 属性。
处理器 没有方便的属性可用。使用 HttpContext.Request 属性。
全局 总是可以通过静态的 HttpContext.Current.Request 属性获取到 HttpRequest 对象。

 

3.8 Displaying details of the request(1)3.8 Displaying details of the request(2)

图 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 选译]

相关文章
|
1月前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
47 5
|
2月前
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
|
2月前
|
开发框架 .NET 开发工具
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
|
3月前
|
开发框架 搜索推荐 前端开发
【.NET全栈】ASP.NET开发Web应用——Web部件技术
【.NET全栈】ASP.NET开发Web应用——Web部件技术
|
2月前
|
开发框架 .NET 数据库连接
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
|
4月前
|
开发框架 .NET API
ASP.NET Core Web中使用AutoMapper进行对象映射
ASP.NET Core Web中使用AutoMapper进行对象映射
|
4月前
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
184 0
|
5月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
|
1月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
34 7
|
1月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
47 0