2016-04-22 78 views
2

在C#中ASP.NET中間件應用程序的順序是否重要?我可以以任何順序將中間件應用到應用程序嗎?

以下2的代碼片段:

public class Startup 
{ 
    ... 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     setUpMVCRoutes(app); 
     app.UseSwaggerUi("foobar/api", "/foobar/v3/api.json"); 
     app.UseSwaggerGen("foobar/{apiVersion}/api.json"); 
     app.UseDefaultFiles(); 
     app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear()); 
     app.UseStaticFiles(); 
     app.UseIdentity(); 
     app.UseCookieAuthentication(); 
    } 
    ... 
} 

public class Startup 
{ 
    ... 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     app.UseIdentity(); 
     app.UseCookieAuthentication(); 
     app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear()); 
     app.UseDefaultFiles(); 
     app.UseStaticFiles(); 
     setUpMVCRoutes(app); 
     app.UseSwaggerGen("foobar/{apiVersion}/api.json"); 
     app.UseSwaggerUi("foobar/api", "/foobar/v3/api.json"); 
    } 
    ... 
} 

有什麼區別?我想如果這個中間件的工作方式類似於python裝飾器或者只是一些執行某些操作並將結果傳遞給下一個函數的函數的管道,那麼它可能很重要。

回答

2

它與ASP.NET無關,但與OWIN託管實施。

訂單事宜。例如,如果您註冊的中間件應該在任何其他中間件之後偵聽錯誤,則有可能無法記錄某些錯誤。

這只是一個假設情況,但如果您更改中間件註冊的順序,它可以讓您很好地瞭解其他情況下的工作方式。

或只是管道的功能,做一些事情,並將結果傳遞給 下一個函數,那麼它可能很重要。

就是這樣!這就是爲什麼訂單重要的原因

+0

那麼,我怎麼知道什麼應該在什麼後?我想將僅適用於開發環境的中間件,僅適用於生產環境的中間件,以及不同方法中常見的中間件組合起來。 – CrabMan

+0

@crabman特定的中間件文檔會告訴你訂單是否重要,如果我們的事情,你應該以什麼順序配置它.. –

相關問題