閱讀664 返回首頁    go 阿裏雲 go 技術社區[雲棲]


.ashx 文件

.ashx 文件用於寫web handler的。其實就是帶HTML和C#的混合文件。當然你完全可以用.aspx 的文件後綴。使用.ashx 可以讓你專注於編程而不用管相關的WEB技術。.ashx必須包含IsReusable. 如下例所示




<% @ webhandler language="C#" %>


using System;
using System.Web;


public class AverageHandler : IHttpHandler
{
public bool IsReusable
{ get { return true; } }
public void ProcessRequest(HttpContext ctx)
{
ctx.Response.Write("hello");
}
}
.ashx比.aspx的好處在與不用多一個html   
注意了VS2005中Web應用程序項目模板裏的Generic Handler 項,發現它是一個.ashx文件,實際上它是一個HttpHandler。後來查了一下.Net SDK文檔,發現Asp.Net1.1也支持.ashx,但是沒有給出詳細內容。 


我們都知道,HttpHandler是一個徹底自定義Http請求的方法,它通過web.config來定義Asp.Net運行時來過濾出要自定義的Http請求,發送到定義在web.config的指定類中。 


利用.ashx文件是一個更好的方法,這個文件類似於.aspx文件,可以通過它來調用HttpHandler類,從而免去了普通.aspx頁麵的控件解析以及頁麵處理的過程。這個文件特別適合於生成動態圖片,生成動態文本等內容。 


建立方法如下: 
首先打開一個Web項目,然後在任意目錄下使用VS2003解決方案資源管理器的“添加”-->“添加新項”,在對話框中選擇“文本文件”,然後在文件名處輸入“TextBuilder.ashx”。 


然後在同目錄下,使用解決方案資源管理器,使用“添加”-->“添加類”,在類文件名處輸入“TextBuilder.ashx.cs”。可以看出,它的文件命名規律與.aspx文件相同。 


然後在.cs文件處輸入以下代碼(名稱空間略):
using System.Web
public sealed class TextBuilder : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
     {
        context.Response.ClearContent();
        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World");
        context.Response.End();
    }


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


然後在“TextBuilder.ashx”文件的第一行處輸入上麵這個類的調用代碼:
<% @ WebHandler language="C#" Class="MyNamespace.TextBuilder" codebehind="TextBuilder.ashx.cs" %>
上麵的代碼需要注意的是:必須在Class項中輸入類的完整名稱,即包括名稱空間及類名稱。 


最後保存並編譯項目。 


使用IE測試,輸入這個.ashx的地址即可。 


大家可以看出Response類有個OutputStream方法,可以向客戶端輸出二進製數據流,所以在我的項目中,使用這個方法,在一個.ashx中使用DundasChart控件就可以生成非常好的統計圖,用它發送二進製數據,方便快捷,而且不需在web.config內輸入任何配置代碼。 


.ashx文件有個缺點,他處理控件的回發事件非常麻煩,比如說如果用它來生成DataGrid的列表也不是不行,但是處理數據的回發,需要一些.aspx頁的功能,隻有自己手動處理這些功能。所以,一般使用.ashx,用來輸出一些不需要回發處理的項目即可。 

最後更新:2017-04-02 22:16:10

  上一篇:go 照鏡子 - 內功修煉
  下一篇:go 集合排序