天天看點

ASP.NET Core提供子產品化Middleware元件

asp.net core引入了中間件(middleware)的概念來定義http 管道(pipeline)。中間件是一系列組合在一起形成web應用程式的元件。這個概念的靈感來源于owin和katana,在asp.net早期版本中也提供了類似的功能。

一個中間件是http 管道中的一個元件。中間件逐個執行,并在管道中鍊式地調用下一個中間件。每個中間件都可以終止調用鍊。例如,如果認證過程失敗,則認證中間件不會再執行下一個中間件。下圖說明了執行流程。

ASP.NET Core提供子產品化Middleware元件

除了asp.net core中内置的中間件,我們也可以建立新的中間件。如果需要自定義中間件,可以編寫一個類,該類中必須包含以httpcontext作為第一個參數的方法。這個方法允許增加其他參數,可以通過依賴注入進行解析。下面的類定義了一個日志中間件:

public class requestloggermiddleware{ private readonly requestdelegate _next; private readonly ilogger _logger; public requestloggermiddleware(requestdelegate next, iloggerfactory loggerfactory) { _next = next; _logger = loggerfactory.createlogger(); } public async task invoke(httpcontext context) { _logger.loginformation("handling request: " + context.request.path); await _next.invoke(context); _logger.loginformation("finished handling request."); }}

中間件必須在startup類的configure方法中進行注冊才可以執行。

public void configure(iapplicationbuilder app) { app.usemiddleware(); }

一點需要注意的是,中間件的執行順序依賴于它們添加到管道中的順序。這就意味着必須花費一些精力确定中間件之間隐含的依賴關系。例如,一個元件要使用會話狀态,但是如果它在會話中間件之前執行,則會導緻崩潰。

伴随着asp.net core“為你所用的資源付費”的理念,一些應用程式的性能可能會有所改善,因為隻有明确配置的中間件才會執行。該架構不再依賴于system.web.dll;元件将以nuget包的形式提供。這也意味着元件的更新将由nuget負責處理,并且每個中間件均可獨立更新。

本文轉自d1net(轉載)

繼續閱讀