asp.net實現頁面的一般處理程式(CGI)學習筆記
ASP.NET提供低階別的請求/響應 API,使開發人員能夠使用 .NET 框架類為傳入的 HTTP 請求提供服務。為此,開發人員需創作支援 System.Web.IHTTPHandler 介面和實現 ProcessRequest()方法的類。當處理 HTTP 請求不需要由高階別的 頁框架抽象化提供的服務時,處理程式通常很有用。處理程式的常用用途包括篩選器和類似 CGI 的應用程式,尤其是那些返回二進位制資料的應用程式。
ASP.NET 收到的每個傳入 HTTP 請求最終由實現 IHTTPHandler 的類的特定例項來處理。IHttpHandlerFactory 提供了處理 IHttpHandler 例項 URL 請求的實際解析的結構。除了 ASP.NET 提供的預設 IHttpHandlerFactory 類外, 開發人員還可以選擇建立和註冊工廠以支援大量的請求解析和啟用方案。
從這段文字可以看出,當aspx頁面不涉及。net框架提 供的高階介面技術(如資料快取、狀態保持、Web窗體控制元件引用等等)時,且向客戶端輸出的不是複雜的HTML文字,特別是只向客戶端返回二進位制資料(如圖 片,聲音等)時,可以用一個。cs應用程式檔案(本文使用c#語言,如果是用VB或JScript,……)來替代,而該應用程式必須有一個實現 System.Web.IHTTPHandler 介面和並實現 ProcessRequest() 方法的類。一個簡單的例子如下:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ImageHander : IHttpHandler, IReadOnlySessionState
{
public void ProcessRequest(HttpContext context)
{
string ProcessID= context.Request.QueryString["ProcessID"];
if (!string.IsNullOrEmpty(ProcessID))
{
Array arr = (Array)context.Session[ProcessID];
context.ClearError();
context.Response.Expires = 0;
context.Response.Buffer = true;
context.Response.Clear();
MemoryStream memStream = new MemoryStream((byte[])arr);
memStream.WriteTo(context.Response.OutputStream);
memStream.Close();
context.Response.ContentType = "image/jpg";
context.Response.StatusCode = 200;
context.Response.End();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
頁面上呼叫:
int i = 1;
byte[] pictureData = GetPictureData(Server.MapPath("Images/Factorymethod.jpg"));
Session[i.ToString()] = pictureData;
this.Image1.ImageUrl = "ImageHander.ashx?ChartID="+i;
GetPictureData方法如下:
Code
public byte[] GetPictureData(string imagepath)
{
FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他過載方法
byte[] byData = new byte[fs.Length];
fs.Read(byData, 0, byData.Length);
fs.Close();
return byData;
}
最後生成出來的效果就是在頁面上展示了Images下的Factorymethod.jpg。
另外一個例子:
namespace WebApplication1
{
/**////
/// $codebehindclassname$ 的摘要說明
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
/**////類必須實現IHttpHandler介面。如果程式將訪問會話狀態(Session),則必須實現 IRequiresSessionState 介面(不包含任何方法的標記介面)。*/
public class DLLHander : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
HttpResponse res = context.Response;
res.Write("
res.Write("
DllHander處理
");
res.Write("本頁面直接由DLL處理");
res.Write("");
}
public bool IsReusable
{
get
{
return true;
}
}
}
}
在配置檔案web.config中新增aspx->dll對映,新增後,web.config應該是這樣子的:
現在當瀏覽器訪問時這個地址時候 http://localhost/WebApplication1/index.aspx 實際上就是呼叫了WebApplication.dll中DLLHander類的ProcessRequest方法,在瀏覽中應該可以看到一個簡單的頁面。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-553567/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- asp.net 一般處理程式接收SessionASP.NETSession
- React學習筆記-事件處理React筆記事件
- Vue學習筆記之事件處理Vue筆記事件
- 學習java筆記 --- 一個實現Iterable介面的小范例Java筆記
- 【Pandas學習筆記02】處理資料實用操作筆記
- BLOB方面的學習筆記筆記
- Flutter學習筆記(32)--PointerEvent事件處理Flutter筆記事件
- swoft 學習筆記之異常處理筆記
- vue學習筆記3-事件處理Vue筆記事件
- Erlang學習筆記(六)順序程式的錯誤處理筆記
- ASP.NET一般處理程式訪問Session問題ASP.NETSession
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- OS學習筆記三:處理器排程筆記
- angular學習筆記(十)-src和href處理Angular筆記
- Python深度學習(處理文字資料)--學習筆記(十二)Python深度學習筆記
- ASP.NET學習筆記2ASP.NET筆記
- 最全面的 Spring 學習筆記Spring筆記
- 《javascript高階程式設計》學習筆記 | 21.2.錯誤處理JavaScript程式設計筆記
- YOLOv3學習筆記之資料處理YOLO筆記
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- SpringMVC 學習筆記(四) 處理模型資料SpringMVC筆記模型
- Java中文處理學習筆記——Hello Unicode (轉)Java筆記Unicode
- 【Pandas學習筆記02】-資料處理高階用法筆記
- 學習筆記——Maven 如何處理傳遞性依賴筆記Maven
- 資訊理論理論學習筆記筆記
- Xamarin 學習筆記 - Page(頁面)筆記
- 【Go學習筆記13】介面和實現Go筆記
- 【批處理學習筆記】第十九課:字串合併筆記字串
- Python自然語言處理學習筆記(57):小結Python自然語言處理筆記
- Nginx學習筆記--Nginx圖片縮圖,水印處理模組Nginx筆記
- Dotnetty學習筆記——自定義初始化處理器Netty筆記
- asp.net頁面的相關標記:(<%$, <%=, <%, <%#, etc.)ASP.NET
- 001.01 一般網頁爬蟲處理網頁爬蟲
- 程式設計實習MOOC/6908/C:簡單的學生資訊處理程式實現程式設計
- struts2學習筆記–使用struts2外掛實現ajax處理(返回json資料)筆記JSON
- Django學習筆記(12)——分頁功能Django筆記
- (MySQL學習筆記)分頁查詢MySql筆記
- ASP.NET MVC學習筆記:(一)路由匹配ASP.NETMVC筆記路由