亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Middleware

系統 1636 0

Middleware

Middleware是OWIN管道的基本組成單元,最后拼接的OWIN管道來處理客戶端請求,輸出網頁。這篇文章,首先看看Web Form, MVC, Web API如何結合OWIN使用。 然后將如何編寫Middleware和編寫一個具體的Cache Middleware.

閱讀目錄:

一. 原有的Web Form, MVC項目如何結合OWIN?

???? 1.1 通過路由配置,將程序分成多個部分,一些部分由Asp.net Web Form或者MVC處理,另外一部分由OWIN管道處理。
???? 1.2 在Web Form, MVC之前插入OWIN

二. Web API以Middleware注冊到OWIN管道

三. 自定義Cache Middleware

???? 3.1 HelloWorld Middleware
???? 3.2 Cache Middleware

四,總結

一,原有的Web Form, MVC項目如何結合OWIN?

壞消息,非常抱歉,盡管OWIN是革命性的,但是Web Form和MVC現在還不能作為一個中間件集成到OWIN管道中。原因在第一篇中Asp.net的歷史中有分析過,原因就是Web Form和MVC依賴于System.Web.dll中的很多類型。而在OWIN管道中,是無法提供這些依賴的。不過好消息是,在Asp.net vNext中,將會徹底告別System.Web.dll依賴, 那個時候,Asp.net vNext將是集大成者。聽說vNext項目組正在和Mono團隊一起工作,使得Asp.net vNext開發的項目能夠在*nix, osx系統上運行。

那么在當前的情況下, OWIN和Web Form, MVC的結合開發一般是兩種形式:

1. 通過路由配置,將程序分成多個部分,一些部分由Asp.net Web Form或者MVC處理,另外一部分由OWIN管道處理。

      // How to hook OWIN pipelines into the normal Asp.Net route table side by side with other components.

protected void Application_Start(object sender, EventArgs e)

{

     //owin開頭的訪問路徑將會發送到startup.cs初始化的OWIN管道處理

     RouteTable.Routes.MapOwinPath("/owin");

     //special開頭的訪問路徑將會由OwinApp2管道來處理



     RouteTable.Routes.MapOwinPath("/special", app =>

     {

         app.Run(OwinApp2.Invoke);

     });

}
    

如上面代碼,在Application_Start函數或者路由配置函數中,分別為/owin路徑和/special配置了不同的OWIN管道。
完整的代碼,請移步這里 http://aspnet.codeplex.com/sourcecontrol/latest#Samples/Katana/AspNetRoutes/Global.asax.cs

2. 在Web Form, MVC之前插入OWIN

在Web Form和MVC項目中,也可以添加Startup.cs, 指定成為OWIN的初始化類型,那么請求會先經過OWIN管道處理,最后轉向Web Form或者MVC程序。這種方式,常常用來配置log, authentication, cache等等這些Middleware.

二,Web API以Middleware注冊到OWIN管道

Web API由于無任何依賴于System.web.dll, 所以Web API可以作為Middleware注冊到OWIN管道中。

具體方法如下:

        public class Startup

    {

        // Invoked once at startup to configure your application.

        public void Configuration(IAppBuilder builder)

        {

            HttpConfiguration config = new HttpConfiguration();

            config.Routes.MapHttpRoute("Default", "api/{controller}/{customerID}", new { controller = "Customer", customerID = RouteParameter.Optional });//定義web api route

            //xml格式輸出結果 

            config.Formatters.XmlFormatter.UseXmlSerializer = true;



            config.Formatters.Remove(config.Formatters.JsonFormatter);

            // config.Formatters.JsonFormatter.UseDataContractJsonSerializer = true;

            //將web api以Middleware注冊到OWIN管道中

            builder.UseWebApi(config);

        }

    }
    

三,自定義Cache Middleware

3.1 HelloWorld Middleware

先建一個Middleware, 通過繼承OwinMiddleware基類。這個Middleware的功能非常簡單,就是打印當前的系統時間。

      public class HelloWorldMiddleware : OwinMiddleware

{

       public HelloWorldMiddleware(OwinMiddleware next) : base(next)

       {

       }



       public override Task Invoke(IOwinContext context)

       {

           var response = "Hello World! It is " + DateTime.Now;

           context.Response.Write(response);

           return Next.Invoke(context);

       }

}
    

將該Middleware注冊到OWIN管道后,執行得到的網頁:

image

只要我們不斷的刷新網頁,每次顯示的時間都會不同,因為每次都會重新讀取系統時間,重新呈現頁面。

3.2 Cache Middleware

實現cache middleware的思路比較簡單,以訪問的Url為key, 以輸出的內容為value。第一次訪問的時候,會緩存下來輸出的內容,在下次訪問的時候,將直接返回緩存的內容,而不是重新生成。具體代碼如下:

? View Code

接下來,我們要改造HelloWorldMiddleware, 在HelloWorldMiddleware輸出后,我們把輸出的內容保存到Cache中。具體代碼如下:

? View Code

最后,將CacheMiddleware添加到OWIN管道中發揮作用,注意注冊管道的順序問題,Middleware是一定要在HelloWorldMiddleware之前的。

      public class Startup

{

    public void Configuration(IAppBuilder app)

    {

        app.Use<CacheMiddleware>();

        app.Use<HelloWorldMiddleware>();

    }

} 
    

四,總結

通過上面的示例,希望對大家如何編寫Middleware有些基本的概念。
OWIN的優勢在上面的例子中應該有些體現,就是Middleware之間通過數據和行為規范, 大家可以一起無縫地協同工作,任何第三方的Middleware都可以非常簡單的集成到OWIN管道中,這應該是OWIN最大的魅力所在,開放的魅力。
同時, OWIN的目標是將Web Form, MVC, Web API統一到一個大的平臺下,這將更加有助于混合編程。

Middleware


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: a在线观看视频 | 999成人国产精品 | 男人的天堂久久香蕉国产 | 久青草视频在线 | 99久久综合精品免费 | 亚洲一区二区三区在线网站 | 国产精品日韩一区二区三区 | 四虎综合九九色九九综合色 | 亚洲国产精品欧美日韩一区二区 | julia中文字幕在线观看 | 六月丁香婷婷激情国产 | 国产自愉自愉全免费高清 | 操美女国产 | 国产色婷婷免费视频 | 国产欧美日韩一区二区三区视频 | 久久97精品久久久久久久看片 | 日韩欧美理论片 | 色黄啪啪网18以下免费进 | 四虎国产永久在线观看 | 国产真实自拍 | 久久久久久久久性潮 | 福利影院第一页 | 欧美成人午夜视频免看 | 亚洲天堂二区 | 国产在线一区二区三区欧美 | 国产精品嘿咻嘿咻在线播放 | 最近中文字幕精彩视频 | 日韩亚洲欧美一区二区三区 | 亚洲香蕉一区二区三区在线观看 | 7m凹凸国产刺激在线视频 | 一区二区三区免费视频 www | 免费观看欧美一级高清 | 久久6国产 | 97在线视 | 九九爱www高清免费人成 | 欧美成人香蕉在线观看 | 奇米影视狠狠狠天天777 | 免费国产一区二区三区 | 精品久久久久久婷婷 | 欧美精品中文 | 91福利视频免费观看 |