ASP.NET運行機制之一般處理程序(ashx)


一. 概述

 

   新建一個ashx文件  代碼如下

<%@ WebHandler Language="C#" Class="TestHandler" %>

using System;
using System.Web;

public class TestHandler : IHttpHandler {
    //dd
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World");
    }
    //dd
    public bool IsReusable {
        get {
            return false;
        }
    }

}

 

二. 解析

 

   1).

<%@ WebHandler Language="C#" Class="TestHandler" %>

 

     @WebHandler為ASP.NET頁面的一個指令 指定為Http handler文件(.ashx)定義屬性(Attribute)編譯選項

       屬性
            Class 指定一個繼承自IHttpHandler的類,當handler被請求時將被實例化用來響應請求。這個屬性是必須的
            CodeBehind 指定Class對應的文件,基本上沒用,主要是用來支持VS顯示的,可以去掉。
 
      編譯選項
           Debug 默認是false,所以非調試就不用打開,影響性能,可以省略
           Description 關於當前handler的描述,ASP.NET解析時忽略,可能調試時能提供輔助信息,可以省略
           Language 默認C# ,可以省略
           WarningLevel 0-4 有默認值,可以省略。

   2).

 

        接下來是底下建立的類

                    實現了一個關鍵的接口:System.Web.IHttpHandler。實現它表明將以何種方式來處理來自外部的請求。

                             參數context是System.Web.HttpContext類型

                             context對象提供對用於為 HTTP 請求提供服務的內部服務器對象(如 Request、Response、

                                         Session 和 Server)的引用,也即可以訪問我們的幾大服務器對象。

                              可以在ProcessRequest方法中編寫如何處理請求的細節

<%@ WebHandler Language="C#" Class="ImageHandler" %>
using System;
using System.Web;

/// <summary>
/// 這就一個沒有任何實現的一般處理程序。
/// </summary>
public class ImageHandler : IHttpHandler 
{
    
    public void ProcessRequest (HttpContext context)
    {
        //獲取虛擬目錄的物理路徑。 
        string path = context.Server.MapPath("");
        //獲取圖片文件的二進制數據。
        byte[] datas = System.IO.File.ReadAllBytes(path +     http://www.cnblogs.com/dongpo888/admin/file:////123.jpg);        //將二進制數據寫入到輸出流中。
        context.Response.OutputStream.Write(datas, 0, datas.Length);
    }
 
    public bool IsReusable 
    {
        get {
            return false;
             }
    }
}

 

                          而IsReusable表明其它的請求是否可以使用這個類的一個實例。

 

 

使用ashx的好處就是不需要在Web.Config中配置,就可以直接用IHttpHandler派生類來處理請求。

常見的應用場景:動態生成圖片(比如驗證碼),響應Ajax請求等。

 

三. aspx、ascx和ashx

     可參考如下博客

      點擊鏈接


免責聲明!

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



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