Request對象
Request對象是HttpRequest類的一個實例,它提供對當前頁請求的訪問,其中包括標題、Cookie、客戶端證書、查詢字符串等,用戶可以使用該類來讀取瀏覽器已經發送的內容。
集合 | 描述 |
---|---|
ClientCertificate | 包含了存儲在客戶證書中的所有的字段值。 |
Cookies | 包含了 HTTP 請求中發送的所有的 cookie 值。 |
Form | 包含了使用 post 方法由表單發送的所有的表單(輸入)值。 |
QueryString | 包含了 HTTP 查詢字符串中所有的變量值。 |
ServerVariables | 包含了所有的服務器變量值。 |
集合意味着Request對象裏還有對象,這些對象裏又有各自屬性、方法,如取值Request.Cookies(“firstname”) 。
屬性 | 描述 |
---|---|
TotalBytes | 返回在請求正文中客戶端發送的字節總數。 |
屬性意味着只能Request.TotalBytes
方法 | 描述 |
---|---|
BinaryRead | 取回作爲 post 請求的一部分而從客戶端發送至服務器的數據,並把它存儲在一個安全的數組中。 |
int a=Request.TotalBytes
int b=Request.BinaryRead(a)
常用實例
HTML 表單實例:
<form id="form1" runat="server" method="post">
<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox><br />
<asp:TextBox ID="TextBox2" runat="server" ></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Aclick"/>
</form>
GET請求:
- Request.QueryString 命令用於收集使用 method=“get” 的表單中的值。
- 使用 GET 方法從表單傳送的信息對所有的用戶都是可見的(出現在瀏覽器的地址欄),並且對所發送信息的量也有限制。
如果用戶在上面的 HTML 表單中輸入 “admin” 和 “123456”,發送至服務器的 URL 會類似這樣:
http://localhost?username=admin&password=123456
C#後端接收:
string username = Request.QueryString["username"];
string password = Request.QueryString["password"];
POST 請求:
- Request.Form 命令用於收集使用 method=“post” 的表單中的值。
- 使用 POST 方法從表單傳送的信息對用戶是不可見的,並且對所發送信息的量沒有限制。
如果用戶在上面的 HTML 表單中輸入 “Bill” 和 “Gates”,發送至服務器的 URL 會類似這樣:
http://localhost
C#後端接收:
string username = Request.Form["username"];
string password = Request.Form["password"];
Response對象
ASP Response 對象用於從服務器向用戶發送輸出的結果。它的集合、屬性和方法描述如下:
集合 | 描述 |
---|---|
Cookies | 設置 cookie 的值。如果 cookie 不存在,則創建 cookie ,並設置指定的值。 |
屬性 | 描述 |
---|---|
Buffer | 規定是否緩衝頁面的輸出。 |
CacheControl | 設置代理服務器是否可以緩存由 ASP 產生的輸出。 |
Charset | 將字符集的名稱追加到 Response 對象中的 content-type 報頭。 |
ContentType | 設置 Response 對象的 HTTP 內容類型。 |
Expires | 設置頁面在失效前的瀏覽器緩存時間(分鐘)。 |
ExpiresAbsolute | 設置瀏覽器上頁面緩存失效的日期和時間。 |
IsClientConnected | 指示客戶端是否已從服務器斷開。 |
Pics | 向 response 報頭的 PICS 標籤追加值。 |
Status | 規定由服務器返回的狀態行的值。 |
方法 | 描述 |
---|---|
AddHeader | 向 HTTP 響應添加新的 HTTP 報頭和值。 |
AppendToLog | 向服務器日誌條目的末端添加字符串。 |
BinaryWrite | 在沒有任何字符轉換的情況下直接向輸出寫數據。 |
Clear | 清除已緩衝的 HTML 輸出。 |
End | 停止處理腳本,並返回當前的結果。 |
Flush | 立即發送已緩衝的 HTML 輸出。 |
Redirect | 把用戶重定向到一個不同的 URL。 |
Write | 向輸出寫指定的字符串。 |
常用實例
重定向 URL。
Response.Redirect("http://localhost/2")
修改由服務器返回的狀態行。
response.Status="404"
設置 HTTP 內容類型。
response.ContentType="text/HTML"
輸出文字
Response.Write("Hello World");
輸出文件流
Response.WriteFile("text.txt");
Server對象
Server對象定義了一個與Web服務器相關的類,提供對服務器上的方法和屬性的訪問,用於訪問服務器上的資源。
屬性 | 描述 |
---|---|
ScriptTimeout | 設置或返回在一段腳本終止前它所能運行時間(秒)的最大值。 |
方法 | 描述 |
---|---|
CreateObject | 創建對象的實例。 |
Execute | 從另一個 ASP 文件中執行一個 ASP 文件。 |
GetLastError() | 返回可描述已發生錯誤狀態的 ASPError 對象。 |
HTMLEncode | 把 HTML 編碼應用到某個指定的字符串。 |
MapPath | 把一個指定的路徑映射到一個物理路徑。 |
Transfer | 把一個 ASP 文件中創建的所有信息發送(傳輸)到另一個 ASP 文件。 |
URLEncode | 把 URL 編碼規則應用到指定的字符串。 |
常用實例
//輸出瀏覽器信息
Response.Write(Request.ServerVariables["http_user_agent"] + "<br>");
Response.Write(Request.ServerVariables["remote_addr"] + "<br>");
Response.Write(Request.ServerVariables["remote_host"] + "<br>");
Response.Write(Request.ServerVariables["request_method"] + "<br>");
Response.Write(Request.ServerVariables["server_name"] + "<br>");
Response.Write(Request.ServerVariables["server_port"] + "<br>");
Response.Write(Request.ServerVariables["server_software"] + "<br>");
//輸出文字
Response.Write("Hello World");
//輸出文件流
Response.WriteFile("text.txt");
//MapPath 獲取服務器的物理地址
Response.Write(Server.MapPath("index.aspx"));
//對字符串編碼
Response.Write(Server.UrlEncode("https://www.runoob.com/asp/met-urlencode.html"));
//對字符串解碼
Response.Write(Server.UrlDecode("https%3a%2f%2fwww.runoob.com%2fasp%2fmet-urlencode.html"));
//對一段指定的字符串應用 HTML 編碼
Response.Write(Server.HtmlEncode("<img>"));
//對HTML進行解碼
Response.Write(Server.HtmlDecode("<img> <img>"));
狀態管理
狀態管理表示進行對存儲結構的操作。其實就是把Response對象抽離出來講解。這裏我們綜合例子來講。
Cookies
//設置Cookies
Response.Cookies["firstname"].Value = "Alex";
//一小時過期
Response.Cookies["firstname"].Expires = DateTime.Now.AddHours(1);//一小時
//取值
Request.Cookies["firstname"]
- 這裏的Cookies(“firstname”)括號內的參數就是設置cookie 的名稱。
- 等於後面表示要對Cookies(“firstname”)進行對賦值操作,cookie 的值。
- expires是設置cookie 的失效日期。如果沒有規定日期,cookie 會在 session 結束時失效。
Session
Cookies與Session的區別在於前者永久保留數據在瀏覽器裏,除非過期時間到,後者關掉瀏覽器即消失。
//設置值
Session["name"]="Hege"
//獲取值
Session["name"]
//設置5分鐘過期
Session.Timeout=5
//獲取全部值、Contents集合
Session.Contents("name")
Session.Contents(i)
//獲取Session.Contents個數
Session.Contents.Count
//立即結束
Session.Abandon
//刪除
Session.Contents.Remove["test2"]
Application
Application 對象用於存儲和訪問來自任何頁面的變量,類似於 Session 對象。不同之處在於,所有的用戶分享一個 Application 對象,而 Session 對象和用戶的關係是一一對應的。
Application 對象存有會被應用程序中的許多頁面使用的信息(比如數據庫連接信息)。可以從任何的頁面訪問這些信息。同時您也可以在一個地方改變這些信息,隨後這些改變會自動反映在所有的頁面上。
下面我們來做一個統計網站的訪問量測試。
首先創建全局應用程序類文件,Global.asax文件。
先在Application_Start初始化變量:
Application["count"] = 0;
然後在新會話啓動時Session_Start進行以下代碼:
Application.Lock();
Application['count'] = (int)Application['count'] + 1;
Application.UnLock();
然後在新會話結束後Session_End進行以下代碼:
Application.Lock();
Application['count'] = (int)Application['count'] - 1;
Application.UnLock();
然後在一個aspx文件的後端cs文件中輸入統計代碼:
Label1.Text = "您是網站的第" + Application["count"] + "位用戶";
ViewState
在經典 ASP 中,當一個表單被提交時,所有的表單值都會被清空。假設您提交了一個帶有大量信息的表單,而服務器返回了一個錯誤。您不得不回到表單改正信息。您點擊返回按鈕,然後發生了什麼…所有表單值都被清空了,您不得不重新開始所有的一切!站點沒有維持您的 ViewState。
在 ASP .NET 中,當一個表單被提交時,表單會連同表單值一起出現在瀏覽器窗口中。
維持 ViewState 是 ASP.NET Web Forms 的默認設置。EnableViewState
屬性。
禁用:
<asp:TextBox ID="TextBox1" runat="server" EnableViewState="false"></asp:TextBox>
HiddenField
增加HiddenField,其實是爲了讓整個狀態管理機制的應用程度更加全方面。因爲不管是ViewState、Cookie還是Session,都有其失效的時候,比如用戶因某種需求設置ViewState爲false,或環境條件限制使用Cookie,或用戶長時間沒有動作導致Session過期等等,那這個時候HiddenField無疑是最佳選擇。
HiddenField控件的作用簡單的說是用於存儲需要在向服務器的發送間保持的值。他作爲<input type= "hidden"/>
元素呈現 。