asp.net實現頁面的一般處理常式(CGI)學習筆記

來源:互聯網
上載者:User

     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
{
    /**//// <summary>
    /// $codebehindclassname$ 的摘要說明
    /// </summary>
    [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("<html><body>");
            res.Write("<h1>DllHander處理</h1><hr>");
            res.Write("本頁面直接由DLL處理");
            res.Write("</html></body>");
        }

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
}

在設定檔web.config中添加aspx->dll映射,添加後,web.config應該是這樣子的:

 <httpHandlers>
        <add verb="*" path="Index.aspx" type="WebApplication1.DLLHander,WebApplication1"/>
      </httpHandlers>

 現在當瀏覽器訪問時這個地址時候 http://localhost/WebApplication1/index.aspx 實際上就是調用了WebApplication.dll中DLLHander類的ProcessRequest方法,在瀏覽中應該可以看到一個簡單的頁面。

最後希望朋友們提出問題,共同解決。謝謝!

Charles Chen

MSN:  Charles.C.Chen@newegg.com  

Email:  gotosunny@msn.com

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.