亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

理解ASP.NET 5的中間件

2019-11-17 02:04:07
字體:
來源:轉載
供稿:網友

理解asp.net 5的中間件

今天推薦的這篇文章,講述了如何實現和使用ASP.NET 5的中間件。

雖然在ASP.NET 5中,微軟沒有再強調OWIN(Open Web Interface for .NET)及其微軟官方的OWIN實現Katana,但是其中涉及到一些原則和設計思想依然被ASP.NET 5以自己的方式所承載下來。比如,解耦服務器和應用程序的關系,應用程序委托,環境狀態這些特性都能在ASP.NET 5中找到,且進行了更多加強。

那么什么是“中間件”呢?OWIN的規范中如此定義:“中間件即是在服務器和應用程序之間的管道傳入的一些組件,為了特定目的監測、路由或編輯請求和回應消息。”這樣的定義對于ASP.NET 5同樣適用,或者可以被認為就是傳統ASP.NET中的HTTP模塊和處理器。某些中間件會完成一些中間任務,比如處理請求的驗證、會話狀態獲取和持久保持、日志記錄諸如此類;有一些中間件會最終生成回應消息。

要編寫ASP.NET 5的中間件,有一種非常簡單的方式,一段Lambda表達式就可以搞定:

public class Startup{    public void Configure(IapplicationBuilder app)    {        app.Run(async context =>        {            context.Response.ContentType = "text/plain";            await context.Response.WriteAsync("Hello ASP.NET 5!");        });    }}

在上述代碼中,傳遞給IApplicationBuilder.Run方法的是一個委托:RequestDelegate,其定義如下:

public delegate Task RequestDelegate(HttpContext context);

RequestDelegate等效于OWIN中的AppFunc。其接受狀態信息HttpContext作為輸入參數,返回一個Task。注意,此HttpContext非SystemWeb中的HttpContext,這是封裝請求處理狀態且對服務器透明(不特定于某種服務器)的上下文狀態對象。而返回Task可以讓調用者能夠等待你的中間件完成工作后才進行后續任務執行。Run方法還有多個重載,以便讓你注入相關依賴。

RequestDelegate同樣也可以用于把中間件串接到執行管道中:

public class Startup{    public void Configure(IApplicationBuilder app)    {        app.Use(next => async context =>        {            // do your stuff here before calling the next middleware             // in the pipeline                         await next.Invoke(context); // call the next guy             // do some more stuff here as the call is unwinding        });         app.Run(async context =>        {            context.Response.ContentType = "text/plain";            await context.Response.WriteAsync("Hello ASP.NET 5!");        });    }}

通過使用IApplicationBuilder.Use方法就可以把自己的中間件代碼串到其他中間件的前面。其中next這個參數,就是下一個中間件的實例。其方法定義如下:

IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate

上面是用Lambda表達式來實現中間件,不過在實際開發當中涉及的代碼都比較龐雜,所以最好是放到一個單獨的類當中,并提供相應的測試代碼。這樣你可以單獨編譯打包分發這個中間件。文章作者Andrei Dzimchuk以實現HTTP Basic驗證的一個簡單中間件為例給出了如下代碼:

public class BasicAuthentication{    private readonly RequestDelegate next;     public BasicAuthentication(RequestDelegate next)    {        this.next = next;    }     public async Task Invoke(HttpContext context,                              IAuthenticationService authenticationService)    {        try        {            var parser = new BasicAuthenticationParser(context);            var username = parser.GetUsername();            var passWord = parser.GetPassword();             await authenticationService.AuthenticateAsync(username, password);            await next(context);        }        catch (InvalidCredentialsException)        {            context.Response.StatusCode = 401;            context.Response.Headers.Add("WWW-Authenticate",                 new[] { "Basic" });        }    }}

這個類非常有意思。首先讓我們非常奇怪的是,它沒有繼承任何基類或者實現任何接口。由此可知,微軟開始在ASP.NET 5中推崇“約定勝于接口”的思想。我們只要實現一個接受RequestDelegate為參數的構造器,和一個方法簽名同RequestDelegate一致的Invoke方法。當然本例中Invoke還接受了另外一個參數,這就是第二個奇怪的地方,我們能夠在中間件里直接使用依賴注入。本例中就是注入了一個IAuthenticationService。

要使用編寫好的中間件也是非常簡單。首先引用一個依賴包“Microsoft.AspNet.RequestContainer ”,然后就可以使用Microsoft.AspNet.Http.Extensions的擴展方法IApplicationBuilder.UseMiddleware來加載中間件,如下:

builder.UseMiddleware<BasicAuthentication>();

通常,我們會把單獨編寫一個擴展類,來提供一個語義根據明確的擴展方法。最終Startup文件就可以編寫為:

public class Startup{    public void Configure(IApplicationBuilder app)    {        app.UseBasicAuthentication();         app.Run(async context =>        {            context.Response.ContentType = "text/plain";            await context.Response.WriteAsync("Hello ASP.NET 5!");        });    }}

到此,我們就完成了中間件的編寫和使用。當然還需要完成注冊IAuthenticationService這樣的代碼,這個就涉及到ASP.NET 5的依賴注入特性,有機會下次介紹。

原文地址在:http://dzimchuk.net/post/Understanding-ASPNET-5-middleware


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频精品视频| 久久精品国产69国产精品亚洲| 国产成人综合一区二区三区| 亚洲美女精品久久| 国产婷婷成人久久av免费高清| 久久人人爽人人爽人人片av高清| 在线日韩中文字幕| 亚洲色图15p| zzijzzij亚洲日本成熟少妇| 精品在线小视频| 国内揄拍国内精品| 91av在线精品| 最近2019中文字幕大全第二页| 欧美黑人又粗大| 韩国福利视频一区| 午夜精品一区二区三区在线视频| 在线国产精品播放| 久久久成人精品视频| 国模精品系列视频| 欧美黑人极品猛少妇色xxxxx| 久久久精品国产一区二区| 菠萝蜜影院一区二区免费| 国产一区二区三区在线视频| 日韩精品免费综合视频在线播放| 成人在线中文字幕| 欧美日韩一区二区三区| 亚洲成人免费在线视频| 国产精品久久久久久av下载红粉| 精品久久久999| 欧美性xxxxx极品| 午夜精品久久久久久99热| 91国内免费在线视频| 国产欧美精品在线| 久久久久久久久久婷婷| 欧美激情图片区| 国产一区二区美女视频| 国产日韩欧美影视| 国产一区二区三区高清在线观看| 久久在精品线影院精品国产| 国产一区二区久久精品| 久久99久久久久久久噜噜| 欧美国产在线电影| 国产精品视频免费在线观看| 欧美日韩国产中文精品字幕自在自线| 欧洲美女7788成人免费视频| 日韩在线视频二区| 欧美wwwxxxx| 成人免费视频在线观看超级碰| 一区三区二区视频| www.日韩欧美| 亚洲免费视频网站| 久久精品国产亚洲精品| 91tv亚洲精品香蕉国产一区7ujn| 亚洲成人激情图| 国内精品400部情侣激情| 色偷偷91综合久久噜噜| 国产丝袜视频一区| 国产精品久久久久影院日本| 久久激情视频久久| 国产精品视频久久久久| 成人中心免费视频| 久久亚洲精品网站| 91精品久久久久久久久久入口| 精品亚洲一区二区三区四区五区| 在线视频日韩精品| 亚洲一区二区三区久久| 日韩免费不卡av| 97国产精品免费视频| 国产成人免费av| 国产乱肥老妇国产一区二| 国产精品99久久久久久白浆小说| 久久噜噜噜精品国产亚洲综合| 国产精品久久久一区| 性欧美办公室18xxxxhd| 国产精品久久久久久久久久久不卡| 亚洲福利视频久久| 日韩精品高清在线观看| 在线亚洲欧美视频| 亚洲人精品午夜在线观看| 91chinesevideo永久地址| 91免费在线视频网站| 日韩视频欧美视频| 日韩中文字幕av| 国产成人精彩在线视频九色| 欧美激情精品在线| 成人国产精品一区| 国产精品日韩av| 亚洲福利精品在线| 欧美疯狂xxxx大交乱88av| 日韩电影在线观看中文字幕| 日本免费一区二区三区视频观看| 亚洲精品视频在线观看视频| 亚洲qvod图片区电影| 日韩欧美在线一区| 高清一区二区三区四区五区| 欧美—级高清免费播放| 在线日韩欧美视频| 成人av.网址在线网站| 亚洲精品久久久久久久久久久| 日韩电影中文字幕在线| 亚洲国产高清福利视频| 成人黄色免费网站在线观看| 久久久久久国产精品美女| 亚洲精品电影网在线观看| 国产精品视频yy9099| 日韩欧美亚洲范冰冰与中字| 亚洲最大的免费| 精品久久久久久久中文字幕| 国产91精品久久久久久久| 亚洲丝袜av一区| 亚洲国产一区自拍| 亚洲一区999| 成人日韩在线电影| 国产精品久久久久久久久久久新郎| 日韩一区二区久久久| 日韩亚洲国产中文字幕| 久久成人国产精品| 日韩在线视频免费观看高清中文| 国产日韩精品在线播放| 亚洲女人被黑人巨大进入| 国产网站欧美日韩免费精品在线观看| 久久久视频在线| 日韩高清不卡av| 久久久久久久电影一区| 国产狼人综合免费视频| 欧美在线视频免费观看| 久久亚洲春色中文字幕| 美女少妇精品视频| 伊人一区二区三区久久精品| 国产精品男女猛烈高潮激情| 欧美一级片一区| 亚洲国产小视频| 久久久久久com| 一本大道久久加勒比香蕉| 91色在线观看| 国产99久久精品一区二区| 另类视频在线观看| 伊人久久综合97精品| 国产不卡一区二区在线播放| 久久琪琪电影院| 欧美激情视频一区二区三区不卡| 久久国产精品免费视频| 亚洲japanese制服美女| 久久综合亚洲社区| 大量国产精品视频| 日韩视频中文字幕| 国产高清在线不卡| 在线视频欧美性高潮| 欧美成人精品三级在线观看| 国产精品亚洲精品| 亚洲视频在线免费看| 日韩不卡在线观看| 午夜精品久久久久久久久久久久久| 日韩精品中文字幕视频在线| 亚洲精品av在线| 亚洲a∨日韩av高清在线观看| 亚洲影院色在线观看免费| 97视频在线观看免费高清完整版在线观看| 欧美日韩国产一区二区| 欧美精品videosex牲欧美| 精品久久久av| 欧美精品18videos性欧| 亚洲精品资源在线| 久久久免费在线观看|