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

来源:http://www.cnblogs.com/levid-gc/archive/2016/02/19/5198588.html
-Advertisement-
Play Games

使用 HttpRequest 對象 HttpRequest 對象描述的是一個正在被處理的 HTTP 請求。下表列舉了 HttpRequest 中的屬性,它們提供了當前請求的相關信息(HttpRequest 類定義了一些方法和屬性,我們會逐步講解當中的一些屬性)。 表 1 – 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 選譯]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用Visual Studio寫代碼,經常遇到的一個問題就是切換中文輸入法麻煩,輸入完註釋//,要切換到中文,輸入完引號,要輸入中文,然後還需要切換回來,有沒有? 有時候中文輸入法忽然失效有沒有?明明在中文輸入法狀態下,輸入不了中文,有沒有?
  • 話說有一天,臨近下班無心工作,在網上看各種文章,閱讀到了一篇名為《聊聊大麥網UWP版的首頁頂部圖片聯動效果的實現方法》(傳遞:http://www.cnblogs.com/hippieZhou/p/4755290.html),看到別人評論自己做的產品,頓時來了興趣,閱讀過後,hippieZhou童鞋
  • 近段時間,需要寫一個小功能,就是需要判斷程式是否已經運行。某個程式安裝後,也許被多個用戶運行。那怎樣判斷當前用戶已經運行了此程式了呢?下麵是Insus.NET的做法,就是:《VB.NET WinForm獲取運行程式用戶名》http://www.cnblogs.com/insus/p/5194839.
  • (轉)這裡給大家分享幾個VS版本,都是最終版的,也是中文版的!. Visual Studio 2005:http://pan.baidu.com/s/1c0eudyS Visual Studio 2008:http://pan.baidu.com/s/1i3GJ7pj Visual Studio 2
  • 以下非原創作品,但都是自己看過理解並寫過,記錄下來,以便之後項目的使用或其它用途。 (1)只需要簡單配置單一屬性值: 1 <configuration> 2 <configSections> 3 <!--配置讀取的全名稱--> 4 <section name="simple" type="Confi
  • 使用 HttpResponse 對象 HttpResponse 對象是與 HttpRequest 對象相對應的,用來表示構建中的響應。它當中提供了方法和屬性可供我們自定義響應,有一些在使用 MVC 視圖的時候很少使用到,但是在使用其他組件的時候可能十分有用,比如模塊是處理器。 同 HttpReque
  • HTTP請求工具類,適用於微信伺服器請求,可以自測 代碼; 1 /// <summary> 2 /// HTTP請求工具類 3 /// </summary> 4 public class HttpRequestUtil 5 { 6 #region 請求Url 7 8 #region 請求Url,不發
  • 在工作中我們經常會遇到格式轉換的問題,有的時候是將JSON轉換成DataTable、DataSet或是List等,也有可能將DataTable、DataSet或是List轉換成JSON的,抽了點時間把這些方法整合了一下,希望對大家有所幫助,如果有什麼問題請指出來,共同探討。 代碼: 1 using
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...