真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ASP.NETMVC學(xué)前篇之請求流程-創(chuàng)新互聯(lián)

ASP.NET MVC學(xué)前篇之請求流程

十年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站設(shè)計(jì),高端網(wǎng)頁制作,對會(huì)所設(shè)計(jì)等多個(gè)方面,擁有多年的網(wǎng)站推廣經(jīng)驗(yàn)。

請求流程描述

對于請求的流程,文章的重點(diǎn)是講HttpApplication和HttpModule之間的關(guān)系,以及一個(gè)簡單的示例實(shí)現(xiàn)。(HttpModule又是MVC框架的入口點(diǎn))

 圖1

ASP.NET MVC學(xué)前篇之請求流程

在請求到達(dá)Web服務(wù)器過后進(jìn)入ASP.NET的時(shí)候是通過ASP.NET來構(gòu)造出一個(gè)HttpWorkerRequest對象,HttpWorkerRequest是抽象類類型,表示著一些請求處理的信息,然后由ASP.NET中的HttpRuntime類型來調(diào)用靜態(tài)函數(shù)Proce***equest(),參數(shù)類型為HttpWorkerRequest,因?yàn)镠ttpWorkerRequest是抽象的,在使用的時(shí)候應(yīng)該是系統(tǒng)內(nèi)部會(huì)有個(gè)實(shí)現(xiàn)類。 在Proce***equest()方法的內(nèi)部產(chǎn)生HttpApplication對象,這之間的過程,已經(jīng)把HttpWorkerPequest對象處理后轉(zhuǎn)變到HttpRequest對象,HttpRequest對象是公開的可代碼訪問的(圖中沒有表示出來)。 這個(gè)時(shí)候還沒有執(zhí)行HttpHandler程序,而是先執(zhí)行HttpModule中的內(nèi)容,它們訂閱了HttpApplication中的事件用于在請求的各種狀態(tài)之間做一下自定義的修改(這些在下面的示例中會(huì)說到。 然后執(zhí)行HttpHandler,在處理程序執(zhí)行完畢后,不是到HttpResponse,而是又到了HttpModule中執(zhí)行請求完成后的一些自定義操作,這是在HttpApplication中約定好的,在這些都完成的情況下才會(huì)做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("服務(wù)端:客戶端已確認(rèn)可以發(fā)貨");
                SendGoods();
                if (_latPassNotice != null)
                {
                    _latPassNotice(NoticeContext);
                }
                if (NoticeContext.IsAccept)
                {
                    Console.WriteLine("服務(wù)端:客戶端已收貨");
                }
            }
            else
            {
                Console.WriteLine("服務(wù)端:等待客戶端確認(rèn)");
            }
        }
    }

Order類代表著訂單(這里這個(gè)比喻有點(diǎn)不恰當(dāng)),里面有著兩個(gè)PassNotice委托類型的事件BefPassNotice、LatPassNotice,分別表示訂單發(fā)貨前的驗(yàn)證和發(fā)貨后的客戶可針對的操作(對應(yīng)著HttpApplication中的各種事件),再看一下客戶類

 代碼1-2

ASP.NET MVC學(xué)前篇之請求流程ASP.NET MVC學(xué)前篇之請求流程

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
ASP.NET MVC學(xué)前篇之請求流程

示例中還有很多地方?jīng)]有說明白,只演示了一個(gè)大概的模型,還有要說的就是Order類型對應(yīng)著的處理是單一的(示例中欠妥),就好比HttpApplication只能對應(yīng)著一個(gè)請求一樣,當(dāng)前的上下文信息中也只是存放著當(dāng)前請求的信息。
在代碼1-3中對Customer是直接的調(diào)用的,而在ASP.NET中不是這樣的。

下一篇將會(huì)講到MVC中的路由部分,對于這個(gè)學(xué)前篇系列慢慢來完善吧。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


標(biāo)題名稱:ASP.NETMVC學(xué)前篇之請求流程-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/ejsds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部