ASP.Net 運行機制
1.使用動態Web開發技術
2.客戶端通過瀏覽器輸入地址,請求該動態頁面
3.Web服務器根據客戶端的請求,對Web應用程序進行編譯或解釋,並生成HTML流,返回給客戶端
4.客戶端瀏覽器解釋HTML流,並顯示爲Web頁面
當請求發送至服務器IIS並被其接收後,IIS服務器會判斷請求文件的類型,
如果是靜態文件 如HTML 圖片或Text IIS會自行根據目錄找到文件併發送給客戶端
如果是動態文件 ASP頁面 則IIS會通過aspnet_isapi.dll將請求轉交給ASP.Net運行時環境進行處理,最終的處理結果會返回給IIS,發送給客戶端
ASP.Net運行時環境中處理請求是通過一系列對象來完成的,包含HttpApplication,HttpModule, HttpHandler
通過使用HttpApplication對象來處理到的請求,HttpApplication對象每次只能處理一個請求,這樣其成員纔可以於儲存針對每個請求的數據
節點配置關鍵字
path 訪問路徑 表示只要請求path屬性指定的文件 都將有type屬性決定的Http
type 用逗號分隔的類或程序集 asp.net首先在應用程序的專用的Bin目錄中進行
HttpModule
對於HTTP請求而言,HttpModule是HTTP請求的“必經之路”,它可以在該HTTP請
求傳遞到最終的“請求處理中心”(HttpHandler)進行處理之前做一些額外的工作或
在某些情況下終止HTTP請求
HttpModule有多個,每次HTTP請求都將逐一通過每個HttpModule
HttpModule和HttpAlication對象是直接交互的
HttpModule有多個,每次HTTP請求都將逐一通過每個HttpModule
HttpModule和HttpAlication對象是直接交互的
//類
pS:不想引用命名空間 可以把類的命名空間刪除
namespace ch2
{
public class TestHttpModule : IHttpModule
{
//資源釋放
public void Dispose()
{
throw new NotImplementedException();
}
//初始化工作
public void Init(HttpApplication context)
{
//初始化 context 綁定兩個事件
context.BeginRequest += context_BeinRequest;
context.EndRequest += context_EndRequest;
}
//在請求處理之前,附加信息
public void context_BeinRequest(object sender,EventArgs e)
{
HttpApplication application = sender as HttpApplication;
application.Response.Write("<P>開始</P>");
}
//在請求處理之後,附加信息
public void context_EndRequest(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
application.Response.Write("<P>結束</P>");
}
}
}
//配置節點
以項目文件爲起始點
<system.webServer>
<!--HttpModule對象-->
<modules>
<add name="test" type="ch2.TestHttpModule" />
</modules>
</system.webServer>
HttpHandler
每個HTTP請求都可能經過多個HttpModule處理,然而最終的處理中心是HttpHandler
一個HTTP請求最終是交給HttpHandler對象的ProcessRequest方法進行處理
與創建的HttpModule類不同
VS提供了創建HttpHandler類的模版即一般處理程序(.ashx)
//類
namespace ch2
{
public class TestHandler : IHttpHandler
{
public bool IsReusable
{
get
{
return false;
}
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
context.Response.Write("1111111111111111");
}
}
}
//配置節點
<system.webServer>
<handlers>
<add verb="=*" path="ad/*.aspx" name="handler" type="ch2.TestHandler"/>
</handlers>
</system.webServer>