下。
傳說中的方法一:(源於http://topic.csdn.net/t/20050203/10/3772606.html)
47 樓Truly()回複於 2005-02-03 20:19:58 得分 15
1.iis預設網站-主目錄-設定-添加-
Executable: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
Extension:.mspx
確定
2.web.config
<system.web>
<httpHandlers>
<add verb="*" path="*.mspx" type="System.Web.UI.PageHandlerFactory"/>
</httpHandlers>
傳說中的方法二:HttpHandler HttpModule 做出屬於自己的尾碼的網頁 !
首先談談ASP.net的一些參數傳遞和頁面定向的方式
第一,ASP.net是用Page.Navigate()調用新頁面的URL。Page.Navigate()向瀏覽器返回了一個http狀態代碼302,使得瀏覽器向server請求那個新的URL。這種導航方法導致每次客戶請求都需兩次在client和server之間往返。
第二,任何要傳遞到新頁面的資訊都需作為URL的參數或儲存在Session中或儲存在資料庫中以便新頁面得到這些資訊。傳統的ASP開發人員很習慣這種做法,但其他的web編程人員則有一些更進階的方法。但是很明顯的這兩個頁面是有依賴性的,而依賴性是編譯器捕捉不到的也是不容易在設計階段建模的。所以在debug時,參數是否被正確的傳遞就只有我們自己檢查了。再有傳統的資料傳遞方式有可能會暴露一些關鍵的資料。更為關鍵的是這使得物件導向的設計變得很複雜。
但是我們可以自訂httphandler來擴充這種支援。
要對HTTPMODULE和IHTTPHANDLER進行研究,必須先對ASP.NET的處理管道有一個瞭解。
在ASP.NET應用程式中,系統使用一組相關的類,通過一定的順序來處理用戶端的請求(REQUEST),ASP.NET應用程式的處理模式可稱之為HTTP處理管道。
HTTPMODULE和IHTTPHANDLER就是這個處理管道上的兩個處理環節。 HTTP處理管道中的類在SYSTEM.WEB名稱空間中定義,主要有以下類型: HTTPWORKERREQUEST 抽象類別定義了ASP.NET頁面處理請求的基本方法;
HTTPRutime 提供了處理應用的一組服務;
HTTPContext 儲存了處理一次請求的所有相關上下文資訊;
HTTPApplicationFactory 提供相關目錄的應用程式;
HTTPApplication 定義了所有ASP.NET應用程式的通用的方法、屬性和事件。這個類也是在使用者在GLOBAL.ASAX檔案中定義的應用的基類;
Modules 處理請求前和響應後的事件;
Handlerfactories 提供應用程式中的HANDLERS;
Handlers 處理請求和響應。
在WINDOWS平台上,HTTP PIPLINE需要IIS的支援。為了運行ASP.NET應用,IIS需要以下兩個檔案:ASPNET_ISAPI.DLL和ASPNET_WP.EXE ASPNET_ISAPI.DLL是一個ISAPI EXTENTION他將發向IIS的請轉交ASPNET_WP.EXE處理 ASPNET_WP.EXE使用HTTPRUNTIME對請求進行具體處理 處理的過程可以用圖表示如下:
下面一個簡單的例子來理解! 1). 建立一個名為SimpleHandler的工程,添加一個類MyHandler.cs,代碼如下:
namespace SimpleHandler
{
public class MyHandler : IHttpHandler
{
public void ProcessRequest(HttpContext ctx)
{
HttpResponse response = ctx.Response;
response.Write(" My first Handler !");
}
public bool IsReusable
{
get { return true; }
}
}
}
2). 將上面的代碼編譯,產生SimpleHandler.DLL 檔案;
3). 建立一個新的Web項目,將檔案SimpleHandler.dll 添加到項目的引用中;
4). 修改Web.config ,添加如下內容:
<system.web>
<httpHandlers>
<add verb="*" path="*.ASPX" type="SimpleHandler.MyHandler,SimpleHandler" />
</httpHandlers>
</system.web>
設定檔中的選項說明:
VERB可以是"GET"或"POST",表示對GET或POST的請求進行處理。
"*"表示對所有請求進行處理。
PATH指明對相應的檔案進行處理,"*.ASPX"表示對發給所有ASPX頁面的請求進行處理。可以指明路徑,如"/TEST/*.ASPX",表明只對TEST目錄下的ASPX檔案進行處理。
TYPE屬性中,逗號前的字串指明HTTPHANDLER的實作類別的類名,後面的字串指明DLL檔案的名稱。
現在,請求項目中的任何ASPX頁面,頁面上顯示的始終只有如下一行字: My first Handler !
因為,我們自訂的HANDLER截獲了所有發向ASPX頁面的請求,並且用自己的的方法來處理這些請求了。
為了使我們的字定義頁面 如: *.AAA 能夠順利運行,我們需要修改WEB.CONFIG檔案:
<system.web>
<httpHandlers>
<add verb="*" path="*.AAA" type="SimpleHandler.MyHandler,SimpleHandler" />
</httpHandlers>
</system.web>
為了讓對尾碼名為.AAA 的檔案的請求能夠被我們的HANDLER截獲運行,我們還需要一些額外的工作。開啟IIS的管理主控台,又鍵單擊網站,選擇"屬性",跳出網站的屬性對話方塊。選擇主目錄選項,選擇配置,彈出應用程式配置對話方塊,將".AAA"添加到應用程式對應中 . 好了,我們現在可以在項目中添加一個.AAA 檔案,當向該檔案發送請求時,瀏覽器顯示: My first Handler ! 而對其他ASPX檔案的訪問不受影響。