在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;