[摘]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類的靜態方法。
- HttpUtility公開了一些靜態方法,如:
HtmlEncode(),應該是使用頻率比較高的方法,用於防止注入攻擊,它負責安全地生成一段HTML代碼。
有時我們還需要生成一個URL,那么UrlEncode()方法就能派上用場了,因為URL中並不能包含所有字符,所以要做相應的編碼。
HttpUtility還有一個方法HtmlAttributeEncode(),它也是用於防止注入攻擊,安全地輸出一個HTML屬性。
在.net4中,HttpUtility還提供了另一個方法:JavaScriptStringEncode(),也是為了防止注入攻擊,安全地在服務端輸出一段JS代碼。 - HttpUtility還公開了一些靜態方法,如:
HtmlDecode(), UrlDecode(),通常來說,我們並不需要使用它們。尤其是UrlDecode ,除非您要自己的框架,一般來說, 在我們訪問QueryString, Form時,已經做過UrlDecode了,您就不用再去調用了。 - 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)的關鍵