獲取與該 Page 對象關聯的 HttpResponse 對象。該對象使您得以將 HTTP 響應數據發送到客戶端,幷包含有關該響應的信息。 html
1、HttpResponse 類 web
封裝來自 ASP.NET 操做的 HTTP 響應信息。 數據庫
HttpResponse 類型公開如下成員。 數組
構造函數 瀏覽器
說明 服務器 |
|
HttpResponse cookie |
基礎結構。初始化 HttpResponse 類的新實例。 session |
方法 app
名稱 |
說明 |
將一組緩存依賴項與響應關聯,這樣,若是響應存儲在輸出緩存中而且指定的依賴項發生變化,就可使該響應失效。 |
|
已重載。 使緩存響應的有效性依賴於緩存中的其餘項。 |
|
使緩存響應的有效性依賴於緩存中的其餘項。 |
|
已重載。 使緩存響應的有效性依賴於緩存中的其餘項。 |
|
將單個文件名添加到文件名集合中,當前響應依賴於該集合。 |
|
將一個 HTTP 標頭添加到輸出流。提供 AddHeader 是爲了與 ASP 的先前版本保持兼容。 |
|
基礎結構。將一個 HTTP Cookie 添加到內部 Cookie 集合。 |
|
將 HTTP 頭添加到輸出流。 |
|
將自定義日誌信息添加到 Internet 信息服務 (IIS) 日誌文件。 |
|
若是會話使用 Cookieless 會話狀態,則將該會話 ID 添加到虛擬路徑中,並返回組合路徑。若是不使用 Cookieless 會話狀態,則 ApplyAppPathModifier 返回原始的虛擬路徑。 |
|
將一個二進制字符串寫入 HTTP 輸出流。 |
|
清除緩衝區流中的全部內容輸出。 |
|
清除緩衝區流中的全部內容輸出。 |
|
清除緩衝區流中的全部頭。 |
|
關閉到客戶端的套接字鏈接。 |
|
禁用當前響應的內核緩存。 |
|
將當前全部緩衝的輸出發送到客戶端,中止該頁的執行,並引起 EndRequest 事件。 |
|
向客戶端發送當前全部緩衝的輸出。 |
|
用做特定類型的哈希函數。 (繼承自 Object。) |
|
將一個 HTTP PICS-Label 標頭追加到輸出流。 |
|
已重載。 將客戶端重定向到新的 URL。 |
|
從緩存中移除與指定路徑關聯的全部緩存項。此方法是靜態的。 |
|
基礎結構。更新 Cookie 集合中的一個現有 Cookie。 |
|
已重載。 將指定的文件直接寫入 HTTP 響應輸出流,而不在內存中緩衝該文件。 |
|
已重載。 將信息寫入 HTTP 響應輸出流。 |
|
已重載。 將指定的文件直接寫入 HTTP 響應輸出流。 |
|
容許將響應替換塊插入響應,從而容許爲緩存的輸出響應動態生成指定的響應區域。 |
屬性
說明 |
|
獲取或設置一個值,該值指示是否緩衝輸出並在處理完整個響應以後發送它。 |
|
獲取或設置一個值,該值指示是否緩衝輸出並在處理完整個頁以後發送它。 |
|
獲取網頁的緩存策略(例如:過時時間、保密性設置和變化條款)。 |
|
獲取或設置與 HttpCacheability 枚舉值之一匹配的 Cache-Control HTTP 標頭。 |
|
獲取或設置輸出流的 HTTP 字符集。 |
|
獲取或設置輸出流的 HTTP 字符集。 |
|
獲取或設置輸出流的 HTTP MIME 類型。 |
|
獲取響應 Cookie 集合。 |
|
獲取或設置在瀏覽器上緩存的頁過時以前的分鐘數。若是用戶在頁面過時以前返回同一頁,則顯示緩存的版本。提供 Expires 是爲了與 ASP 的先前版本保持兼容。 |
|
獲取或設置從緩存中移除緩存信息的絕對日期和時間。提供 ExpiresAbsolute 是爲了與ASP 的先前版本保持兼容。 |
|
獲取或設置一個包裝篩選器對象,該對象用於在傳輸以前修改 HTTP 實體主體。 |
|
獲取或設置一個 Encoding 對象,該對象表示當前標頭輸出流的編碼。 |
|
獲取響應標頭的集合。 |
|
獲取一個值,經過該值指示客戶端是否仍鏈接在服務器上。 |
|
獲取一個布爾值,該值指示客戶端是否正在被傳輸到新的位置。 |
|
啓用到輸出 HTTP 響應流的文本輸出。 |
|
啓用到輸出 HTTP 內容主體的二進制輸出。 |
|
獲取或設置 Http Location 標頭的值。 |
|
設置返回到客戶端的 Status 欄。 |
|
獲取或設置返回給客戶端的輸出的 HTTP 狀態代碼。 |
|
獲取或設置返回給客戶端的輸出的 HTTP 狀態字符串。 |
|
獲取或設置一個限定響應的狀態代碼的值。 |
|
獲取或設置一個值,該值指示是否將 HTTP 內容發送到客戶端。 |
|
獲取或設置一個值,該值指定是否禁用 IIS 7.0 自定義錯誤。 |
2、 Response對象的經常使用成員說明
Response用於迴應瀏覽器,告訴瀏覽器迴應內容的報頭、服務器的狀態信息和輸出指定的內容。
(1) Response.ContentType = "text/html"
設定輸出內容的類型。
字符串格式爲type/subtype,type表示內容的分類,subtype則表示特定內容類型,再如"image/gif"
(2) Response.Clear()方法
刪除全部緩存中的HTML輸出。但此方法只刪除Response顯示輸出信息,不刪除response頭信息。
(3) Response.ClearContent()方法
不只像Clear()方法那樣刪除Response顯示輸出信息,並且還刪除Response頭信息。
(4) Response.ClearHeader()方法
僅刪除Response頭信息
(5) Response.Expires=number
設定頁面在瀏覽器Cache中失效的時間長度(單位爲分鐘),若是用戶在其失效以前返回到同一個畫面,則顯示Cache中的頁面。
(6) Response.ExpiresAbsolute=DateTime
設定頁面在瀏覽器Cache中失效的具體時間。例:Response.ExpiresAbsolute=DateTime.Now,表示立刻過時。
(7) Response.Buffer=bool
設定頁面是否進行緩衝。默認是True。
若有緩衝,則服務器在當前處理的頁面上的語句被處理以前,不將Response語句發送給客戶端,除非有Flush()或End()方法調用。
(8) Response.Flush()方法
當即將緩區中的頁面輸出。
(9) Response.End()方法
使Web服務器中止當前的程序並返回結果,剩下的文件內容是沒有處理的。
(10) Response.Write()方法
輸出指定的文本內容。例:Response.Write("Hello!")
(11) Response.BinaryWrite()方法
將指定的信息不進行字符轉換,直接寫到當前的HTTP輸出。此方法可用來自來非字符數據,如某些應用程序要求的二進制數據。
(12) Response.WriteFile()方法
直接將輸出內容寫入一個文件。例:Response.WriteFile("D://abc.txt")
注:寫入的文件在寫入以前必須存在。
3、用Response對象輸出圖像
一、、簡介
做爲ASP.NET基本對象之一的Response對象不但能夠經過Write()方法直接在頁面上輸出字符串數據,並且還可使用BinaryWrite()方法直接顯示二進制表示的數據,如圖像、圖片等。
本文示例小工程將向你展現如何使用Response對象在ASP.NET 2.0 Web頁面中輸出直接存儲在SQL Server 2005數據庫中的圖像數據。
【注意】在本例中,咱們沒有討論僅在SQL Server 2005表格中存儲圖像的URL的情形。由於這種情形是實際開發中被廣爲採用的方法,因此,讀者不難在Web上搜到相應的使用案例。
首先,讓咱們來分析一個簡單的直接在Web頁面上繪製並輸出圖像數據的例子。
二、直接在Web頁面上繪製並輸出圖像數據
下面的代碼示例在請求頁面時將繪製三個部分重疊的矩形。該代碼首先將ContentType屬性設置爲image/jpeg,以便將整個頁面呈現爲一幅JPEG圖像。第二步,該代碼調用Clear方法以確保不會將無關的內容(包括標頭)與此響應一同發送。第三步,該代碼將BufferOutput屬性設置爲true,從而使該頁面在徹底處理以後再發送到發出請求的客戶端。第四步,建立兩個用於繪製矩形的對象,即Bitmap和Graphics對象。在該頁中建立的變量將做爲繪製矩形的座標和在最大的矩形中顯示的字符串。
在繪製三個矩形和其中顯示的字符串時,將Bitmap保存到與OutputStream屬性相關聯的Stream對象中,並將其格式設置爲JPEG。接下來,該代碼調用Dispose和Dispose方法來釋放資源—這些資源爲兩個繪製對象所使用。最後,該代碼調用Flush方法將緩衝的響應發送到請求客戶端。
完整的實現代碼以下所示:
<%@ Page Language="C#" %> <%@ import Namespace="System.Drawing" %> <%@ import Namespace="System.Drawing.Imaging" %> <%@ import Namespace="System.Drawing.Drawing2D" %> <script runat="server"> private void Page_Load(object sender, EventArgs e) { //設置頁面的content type爲JPEG文件 //而且清除全部的響應頭部信息 Response.ContentType = "image/jpeg"; Response.Clear(); //對響應做出緩衝以便處理完成後發送頁面 Response.BufferOutput = true; //建立一字體風格 Font rectangleFont = new Font( "Arial", 10, FontStyle.Bold); //建立整數變量 int height = 100; int width = 200; //建立一個隨機數字生成器而且基於它建立 //變量值 Random r = new Random(); int x = r.Next(75); int a = r.Next(155); int x1 = r.Next(100); //建立一張位圖而且使用它建立一個 //Graphics對象 Bitmap bmp = new Bitmap( width, height, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(bmp); g.SmoothingMode = SmoothingMode.AntiAlias; g.Clear(Color.LightGray); //使用這個Graphics對象繪製3個矩形 g.DrawRectangle(Pens.White, 1, 1, width-3, height-3); g.DrawRectangle(Pens.Aquamarine, 2, 2, width-3, height-3); g.DrawRectangle(Pens.Black, 0, 0, width, height); //使用這個Graphics對象輸出一個字符串 // on the rectangles. g.DrawString( "ASP.NET Samples", rectangleFont, SystemBrushes.WindowText, new PointF(10, 40)); //在其中兩個矩形上添加顏色 g.FillRectangle( new SolidBrush( Color.FromArgb(a, 255, 128, 255)), x, 20, 100, 50); g.FillRectangle( new LinearGradientBrush( new Point(x, 10), new Point(x1 + 75, 50 + 30), Color.FromArgb(128, 0, 0, 128), Color.FromArgb(255, 255, 255, 240)), x1, 50, 75, 30); //把位圖保存到響應流中而且把它轉換成JPEG格式 bmp.Save(Response.OutputStream, ImageFormat.Jpeg); //釋放掉Graphics對象和位圖所使用的內存空間 g.Dispose(); bmp.Dispose(); //把輸出結果發送到客戶端 Response.Flush(); } </script> <html> <head> </head> <body> <form runat="server"> </form> </body> </html> |
接下來,讓咱們討論本文重點—如何在ASP頁面中輸出直接存儲在數據庫中的圖像數據。
3、事件設計
示例工程中的DispImage.aspx頁面在其初始化函數Page_Load(object sender,EventArgs e)中使用Response對象輸出一幅圖像—該圖像存儲在SQL Server 2005 Express Edition數據庫中,並用二進制表示。
在代碼中,咱們首先從數據庫PictureDB的表格PictureTab中獲取一個ID值爲1的圖片,而後使用byte數組Data保存圖片的數據。而後,咱們能夠基於以下步驟來輸出相應的圖像:
1. 設置Response對象的輸出類型;
2. 輸出圖像的文件頭;
3. 輸出圖像的二進制數據;
4. 結束輸出。若是圖片太大,還可使用輸出緩衝的方法。
函數Page_Load(object sender,EventArgs e)的程序代碼以下:
protectedvoid Page_Load(object sender,EventArgs e) { ///建立連接 SqlConnection myConnection = new SqlConnection( ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString); ///定義SQL語句 string cmdText = "SELECT * FROM PictureTab WHERE PictureID='1'"; ///建立Command SqlCommand myCommand = new SqlCommand(cmdText,myConnection); ///定義DataReader SqlDataReader dr = null; try { ///打開連接 myConnection.Open(); ///讀取數據 dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection); } catch(SqlException ex) { ///拋出異常 thrownew Exception(ex.Message,ex); } ///定義保存數據的字節數組 byte[] Data = null; while(dr.Read()) { ///讀取數據 Data = (byte[])dr["Data"]; Response.ContentType = dr["Type"].ToString(); } dr.Close(); //顯示圖片數據 this.EnableViewState = false; ///輸出文件頭 Response.AppendHeader("Content-Length",Data.Length.ToString()); ///輸出文件的數據 Response.BinaryWrite(Data); ///結束輸出 Response.End(); } |