ASP.NET MVC學前篇之請求流程
專注于為中小企業(yè)提供網(wǎng)站制作、成都做網(wǎng)站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)五原免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
對于請求的流程,文章的重點是講HttpApplication和HttpModule之間的關系,以及一個簡單的示例實現(xiàn)。(HttpModule又是MVC框架的入口點)
圖1

在請求到達Web服務器過后進入ASP.NET的時候是通過ASP.NET來構(gòu)造出一個HttpWorkerRequest對象,HttpWorkerRequest是抽象類類型,表示著一些請求處理的信息,然后由ASP.NET中的HttpRuntime類型來調(diào)用靜態(tài)函數(shù)Proce***equest(),參數(shù)類型為HttpWorkerRequest,因為HttpWorkerRequest是抽象的,在使用的時候應該是系統(tǒng)內(nèi)部會有個實現(xiàn)類。 在Proce***equest()方法的內(nèi)部產(chǎn)生HttpApplication對象,這之間的過程,已經(jīng)把HttpWorkerPequest對象處理后轉(zhuǎn)變到HttpRequest對象,HttpRequest對象是公開的可代碼訪問的(圖中沒有表示出來)。 這個時候還沒有執(zhí)行HttpHandler程序,而是先執(zhí)行HttpModule中的內(nèi)容,它們訂閱了HttpApplication中的事件用于在請求的各種狀態(tài)之間做一下自定義的修改(這些在下面的示例中會說到。 然后執(zhí)行HttpHandler,在處理程序執(zhí)行完畢后,不是到HttpResponse,而是又到了HttpModule中執(zhí)行請求完成后的一些自定義操作,這是在HttpApplication中約定好的,在這些都完成的情況下才會做Response操作。
我們將在下面的示例中模擬的演示一下在HttpApplication類型中的事件使用模型。
代碼1-1
public delegate void PassNotice(NoticeContext noticeContext);
public class Order
{
private NoticeContext _noticeContext;
public NoticeContext NoticeContext
{
get { return _noticeContext; }
set { _noticeContext = value; }
}
private PassNotice _befPassNotice;
public event PassNotice BefPassNotice
{
add
{
_befPassNotice += value;
}
remove
{
_befPassNotice -= value;
}
}
private PassNotice _latPassNotice;
public event PassNotice LatPassNotice
{
add
{
_latPassNotice += value;
}
remove
{
_latPassNotice -= value;
}
}
private void SendGoods()
{
Console.WriteLine("發(fā)貨…… 請等待接收");
}
public void Start()
{
if (_befPassNotice != null)
{
_befPassNotice(NoticeContext);
}
if (NoticeContext.IsSend)
{
Console.WriteLine("服務端:客戶端已確認可以發(fā)貨");
SendGoods();
if (_latPassNotice != null)
{
_latPassNotice(NoticeContext);
}
if (NoticeContext.IsAccept)
{
Console.WriteLine("服務端:客戶端已收貨");
}
}
else
{
Console.WriteLine("服務端:等待客戶端確認");
}
}
}
Order類代表著訂單(這里這個比喻有點不恰當),里面有著兩個PassNotice委托類型的事件BefPassNotice、LatPassNotice,分別表示訂單發(fā)貨前的驗證和發(fā)貨后的客戶可針對的操作(對應著HttpApplication中的各種事件),再看一下客戶類
代碼1-2


public class NoticeContext
{
public bool IsSend { get; set; }
public bool IsAccept { get; set; }
}
public class Customer
{
private Order _Order;
public Customer(Order order)
{
_Order = order;
_Order.BefPassNotice += new PassNotice(_Order_BefPassNotice);
_Order.LatPassNotice += new PassNotice(_Order_LatPassNotice);
}
void _Order_LatPassNotice(NoticeContext noticeContext)
{
noticeContext.IsAccept = true;
Console.WriteLine("客戶端:接收貨物");
}
void _Order_BefPassNotice(NoticeContext noticeContext)
{
noticeContext.IsSend = true;
Console.WriteLine("客戶端:可以發(fā)貨");
}
}View Code
這里Customer類有著對Order類的引用,并且訂閱Order類的事件,從而可以處理到Order類中的NoticeContex類型值(類似于HttpModule)。
調(diào)用
代碼1-3
Order order = new Order();
Customer customer = new Customer(order);
order.NoticeContext = new NoticeContext() { IsAccept = false, IsSend = false };
order.Start();結(jié)果如圖2所示
圖2
示例中還有很多地方?jīng)]有說明白,只演示了一個大概的模型,還有要說的就是Order類型對應著的處理是單一的(示例中欠妥),就好比HttpApplication只能對應著一個請求一樣,當前的上下文信息中也只是存放著當前請求的信息。
在代碼1-3中對Customer是直接的調(diào)用的,而在ASP.NET中不是這樣的。
下一篇將會講到MVC中的路由部分,對于這個學前篇系列慢慢來完善吧。
網(wǎng)站題目:ASP.NETMVC學前篇之請求流程
本文URL:http://www.yijiale78.com/article44/pcedhe.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、商城網(wǎng)站、網(wǎng)站內(nèi)鏈、定制網(wǎng)站、品牌網(wǎng)站建設、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)