[摘]HttpContext, HttpRequest, HttpResponse, HttpRuntime, HttpServerUtility


[摘]http://www.cnblogs.com/fish-li/archive/2011/08/21/2148640.html


HttpRuntime

HttpRuntime公開了一個靜態方法 UnloadAppDomain() ,這個方法可以讓我們用代碼重新啟動網站。 通常用於用戶通過程序界面修改了一個比較重要的參數,這時需要重啟程序了。

HttpRuntime還公開了一個大家都熟知的靜態屬性 Cache 。可能有些人認為他/她在使用Page.Cache或者HttpContext.Cache, 事實上后二個屬性都是HttpRuntime.Cache的【快捷方式】。


HttpServerUtility , HttpUtility

HttpServerUtility的實例通常以Server的屬性公開, 但它的提供一些Encode, Decode方法其實調用的是HttpUtility類的靜態方法。

  1. HttpUtility公開了一些靜態方法,如:
    HtmlEncode(),應該是使用頻率比較高的方法,用於防止注入攻擊,它負責安全地生成一段HTML代碼。
    有時我們還需要生成一個URL,那么UrlEncode()方法就能派上用場了,因為URL中並不能包含所有字符,所以要做相應的編碼。
    HttpUtility還有一個方法HtmlAttributeEncode(),它也是用於防止注入攻擊,安全地輸出一個HTML屬性。
    在.net4中,HttpUtility還提供了另一個方法:JavaScriptStringEncode(),也是為了防止注入攻擊,安全地在服務端輸出一段JS代碼。
  2. HttpUtility還公開了一些靜態方法,如:
    HtmlDecode(), UrlDecode(),通常來說,我們並不需要使用它們。尤其是UrlDecode ,除非您要自己的框架,一般來說, 在我們訪問QueryString, Form時,已經做過UrlDecode了,您就不用再去調用了。
  3. HttpServerUtility除了公開了比較常用的Encode, Decode方法外,還公開了一個非常有用的方法:Execute(),是的,它非常有用, 尤其是您需要在服務端獲取一個頁面或者用戶控件的HTML輸出時。

HttpRequest

HttpRequest:使 ASP.NET 能夠讀取客戶端在 Web 請求期間發送的 HTTP 值。HttpRequest的實例包含了所有來自客戶端的所有數據,我們可以把這些數據看成是輸入數據, Handler以及Module就相當於是處理過程,HttpResponse就是輸出了。

在HttpRequest包含的所有輸入數據中,有我們經常使用的QueryString, Form, Cookie,它還允許我們訪問一些HTTP請求頭、 瀏覽器的相關信息、請求映射的相關文件路徑、URL詳細信息、請求的方法、請求是否已經過身份驗證,是否為SSL等等。

HttpRequest的公開屬性絕大部分都是比較重要的

// 獲取服務器上 ASP.NET 應用程序的虛擬應用程序根路徑。
public string ApplicationPath { get; }

// 獲取應用程序根的虛擬路徑,並通過對應用程序根使用波形符 (~) 表示法(例如,以“~/page.aspx”的形式)使該路徑成為相對路徑。
public string AppRelativeCurrentExecutionFilePath { get; }

// 獲取或設置有關正在請求的客戶端的瀏覽器功能的信息。
public HttpBrowserCapabilities Browser { get; set; }

// 獲取客戶端發送的 cookie 的集合。
public HttpCookieCollection Cookies { get; }

// 獲取當前請求的虛擬路徑。
public string FilePath { get; }

// 獲取采用多部分 MIME 格式的由客戶端上載的文件的集合。
public HttpFileCollection Files { get; }

// 獲取或設置在讀取當前輸入流時要使用的篩選器。
public Stream Filter { get; set; }

// 獲取窗體變量集合。
public NameValueCollection Form { get; }

// 獲取 HTTP 頭集合。
public NameValueCollection Headers { get; }

// 獲取客戶端使用的 HTTP 數據傳輸方法(如 GET、POST 或 HEAD)。
public string HttpMethod { get; }

// 獲取傳入的 HTTP 實體主體的內容。
public Stream InputStream { get; }

// 獲取一個值,該值指示是否驗證了請求。
public bool IsAuthenticated { get; }

// 獲取當前請求的虛擬路徑。
public string Path { get; }

// 獲取 HTTP 查詢字符串變量集合。
public NameValueCollection QueryString { get; }

// 獲取當前請求的原始 URL。
public string RawUrl { get; }

// 獲取有關當前請求的 URL 的信息。
public Uri Url { get; }

// 從 QueryString、Form、Cookies 或 ServerVariables 集合中獲取指定的對象。
public string this[string key] { get; }

// 將指定的虛擬路徑映射到物理路徑。
// 參數:  virtualPath:  當前請求的虛擬路徑(絕對路徑或相對路徑)。
// 返回結果:  由 virtualPath 指定的服務器物理路徑。
public string MapPath(string virtualPath);

HttpRequest的QueryString, Form屬性的類型都是NameValueCollection【是一個不區分大小寫的集合】,它個集合類型有一個特點:允許在一個鍵下存儲多個字符串值。如:

Response.Redirect( "?aa=1&bb=2&cc=3&aa=" + HttpUtility.UrlEncode("5,6,7"), true);

string aa=Request.QueryString[aa];

aa的值為:"1,5,6,7”

HttpRequest還有二個用於方便獲取HTTP數據的屬性Params,Item ,它可以讓我們在寫代碼時不必區分是GET還是POST,這二個屬性唯一不同的是:Item是依次訪問這4個集合,找到就返回結果,而Params是在訪問時,先將4個集合的數據合並到一個新集合(集合不存在時創建), 然后再查找指定的結果。

HttpResponse

HttpResponse:向客戶端返回結果。而所有需要向客戶端返回的操作都要調用HttpResponse的方法。 它提供的功能集中在操作HTTP響應部分,如:響應流,響應頭。

// 獲取網頁的緩存策略(過期時間、保密性、變化子句)。
public HttpCachePolicy Cache { get; }

// 獲取或設置輸出流的 HTTP MIME 類型。默認值為“text/html”。
public string ContentType { get; set; }

// 獲取響應 Cookie 集合。
public HttpCookieCollection Cookies { get; }

// 獲取或設置一個包裝篩選器對象,該對象用於在傳輸之前修改 HTTP 實體主體。
public Stream Filter { get; set; }

// 啟用到輸出 Http 內容主體的二進制輸出。
public Stream OutputStream { get; }

// 獲取或設置返回給客戶端的輸出的 HTTP 狀態代碼。默認值為 200 (OK)。
public int StatusCode { get; set; }

// 將 HTTP 頭添加到輸出流。
public void AppendHeader(string name, string value);

// 將當前所有緩沖的輸出發送到客戶端,停止該頁的執行,並引發EndRequest事件。
public void End();

// 將客戶端重定向到新的 URL。指定新的 URL 並指定當前頁的執行是否應終止。
public void Redirect(string url, bool endResponse);

// 將指定的文件直接寫入 HTTP 響應輸出流,而不在內存中緩沖該文件。
public void TransmitFile(string filename);

// 將 System.Object 寫入 HTTP 響應流。
public void Write(object obj);

HttpContext

HttpContext【在任何地方都能找到】 –>派生 HttpRequest, HttpResponse, HttpServerUtility, Cache

                                                   屬性 User, Items, Current

User:保存於當前請求的用戶身份信息,如果判斷當前請求的用戶是不是已經過身份認證,可以訪問:Request.IsAuthenticated這個實例屬性。

Items:datatype字典,因此適合以Key/Value的方式來訪問,不同的請求之間,數據不會被共享。

Current:是HttpContext在任何地方都能使用其幾個主要派生(HttpRequest, HttpResponse, Server, Cache)的關鍵


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM