在ASP.NET中,有很多種實現偽靜態的辦法,我們今天主要介紹通過IHttpModule這個接口的實現,來解決問題。
相對於整個應用程序來講,如果我們需要在請求發生之時對請求的地址進行處理就需要用到IHttpModule接口。常用實現偽靜態技術。就是將一個Get訪問的查詢字符串變成一個獨立的文件。但是在程序中實際上訪問的還是查詢字符串中的值。如:
Http://www.cnsaiko.com/news.aspx?id=1
改變為
Http://www. cnsaiko.com/news_1.aspx
這樣做的好處在於有利於SEO及防止SQL注入等。當然,文件的擴展名在服務器支持的情況下也是可以變化的。
IHttpModule接口中有兩個方法供我們實現:
Dispose() 處置由實現 IHttpModule 的模塊使用的資源(內存除外)。
Init() 初始化模塊,並使其為處理請求做好准備。
第一步:如果要在應用程序中使用IHttpModule ,則需要配制web.config文件。
在Web.config文件中,我們需要對httpModules元素進行投置,該節點在system.web元素中。如下:
<httpModules>
<add name="HttpModule" type="WebApplication1.HttpModule"/>
</httpModules>
注意:其中type,必須為實現了IHttpModule接口的類型的俱體路徑(包括命名空間)。
第二步:實現IHttpModule
新建一個HttpModule類,與配制文件中的類型命名空間路徑相同。
使用該類實現IHttpModule接口。
我們開始的代碼將寫在Init方法中,該方法中的HttpApplication對象context包括程用程序對象的所有方法,屬性和事件。那麼在這個對象中,我們就可以開始一個請求事件的處理。
在Init方法中可以書寫:
context.BeginRequest += new EventHandler(context_BeginRequest);
以上代碼,為請求開始事件注冊了一個委托方法。
在注冊委托方法時,可以在寫完+=後,連續按兩次Tab鍵,會自動生成context_BeginRequest方法。
第三步:關於context_BeginRequest()方法
在context_BeginRequest方法中,我們可根據請求的不同,進行請求的重新定向。這樣就可以將虛擬的偽靜態路徑變成我們程序所需要的Get方式查詢字符串。
要想改變請求,就必須得到當前求請,在ASP.NET中,使用HttpContext類型來封裝所有請求對象。那麼,我們可以通過剛剛的HttpApplication對象來獲取HttpContext對象。如:
HttpApplication application = sender as HttpApplication;
HttpContext context = application.Context;