ASPNET管道()
對於一個ASPNET應用來說HttpApplication派生於Globalasax文件我們可以通過創建globalasax文件對HttpApplication的請求處理行為進行定制Globalasax采用一種很直接的方式實現了這樣的功能這種方式不是我們常用的方法重寫或事件注冊而是直接采用方法名匹配在Globalasax中我們按照Application_{Event Name}這樣的方法命名規則進行事件注冊比如Application_BeginRequest方法用於處理HttpApplication的BeginRequest事件如果通過VS創建一個Globalasax文件將采用如下的默認定義
<%@ Application Language=C# %>
<script runat=server>
void Application_Start(object sender EventArgs e){}
void Application_End(object sender EventArgs e){}
void Application_Error(object sender EventArgs e){}
void Session_Start(object sender EventArgs e){}
void Session_End(object sender EventArgs e){}
</script>
HttpModule
ASPNET擁有一個具有高度可擴展性的引擎並且能夠處理對於不同資源類型的請求那麼是什麼成就了ASPNET的高可擴展性呢? HttpModule功不可沒
當請求轉入ASPNET管道時最終負責處理該請求的是與請求資源類型相匹配的HttpHandler對象但是在Handler正式工作之前ASPNET會先加載並初始化所有配置的HttpModule對象HttpModule在初始化的過程中會將一些功能注冊到HttpApplication相應的事件中在HttpApplication請求處理生命周期中的某個階段相應的事件會被觸發通過HttpModule注冊的事件處理程序也得以執行
所有的HttpModule都實現了具有如下定義的SystemWebIHttpModule接口其中Init方法用於實現HttpModule自身的初始化該方法接受一個HttpApplication對象有了這個對象事件注冊就很容易了
public interface IHttpModule
{
void Dispose()
void Init(HttpApplication context)
}
ASPNET提供的很多基礎功能都是通過相應的HttpModule實現的下面列出了一些典型的HttpModule
OutputCacheModule實現了輸出緩存(Output Caching)的功能
SessionStateModule在無狀態的HTTP協議上實現了基於會話(Session)的狀態
WindowsAuthenticationModule+FormsAuthenticationModule+PassportAuthentication Module實現了WindowsForms和Passport這種典型的身份認證方式
UrlAuthorizationModule + FileAuthorizationModule實現了基於URI和文件ACL(Access Control List)的授權
除了這些系統定義的HttpModule之外我們還可以自定義HttpModule通過Webconfig可以很容易地將其注冊到Web應用中
HttpHandler
對於不同資源類型的請求ASPNET會加載不同的Handler來處理也就是說aspx 頁面與asmx web 服務對應的Handler是不同的所有的HttpHandler都實現了具有如下定義的接口SystemWebIHttpHandler方法ProcessRequest提供了處理請求的實現
public interface IHttpHandler
{
void ProcessRequest(HttpContext context)
bool IsReusable { get; }
}
某些HttpHandler具有一個與之相關的HttpHandlerFactory它實現了具有如下定義的接口SystemWebIHttpHandlerFactory方法GetHandler用於創建新的HttpHandler或者獲取已經存在的HttpHandler
public interface IHttpHandlerFactory
{
IHttpHandler GetHandler(HttpContext context string requestType
string url string pathTranslated)
void ReleaseHandler(IHttpHandler handler)
}
返回目錄ASPNET MVC 框架揭秘
編輯推薦
ASP NET開發培訓視頻教程
Microsoft NET框架程序設計視頻教程
Java程序性能優化讓你的Java程序更快更穩定
Visual C++音頻/視頻技術開發與實戰
From:http://tw.wingwit.com/Article/program/net/201311/16116.html