ASP.NET Core Startup類 Configure()方法 | ASP.NET Core 中間件詳細說明


ASP.NET Core 程序啟動過程如下

目錄

  1.  Startup 類
  2. Configure() 方法
  3. 中間件
  4. 使用中間件
  5. Configure 方法 的參數 IApplicationBuilder
  6. Extension Methods(拓展方法)--微軟提供的中間件

1, Startup 類

ASP.NET Core 應用使用 Startup 類,按照約定命名為 Startup  Startup 類:

  • 可選擇性地包括 ConfigureServices 方法以配置應用的服務。
  • 必須包括 Configure 方法以創建應用的請求處理管道。

當應用啟動時,運行時調用 ConfigureServices 和 Configure 。

Startup 方法體如下

public class Startup
{
    // 使用此方法向容器添加服務
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }

    // 使用此方法配置HTTP請求管道
    public void Configure(IApplicationBuilder app)
    {
        ...
    }
}

這篇文章只說 Configure


2,Configure() 方法

Configure 是一個在

  • 命名空間 Microsoft.AspNetCore.Hosting 定義的
  • 抽象類 ↓↓↓
public abstract void Configure (Microsoft.AspNetCore.Builder.IApplicationBuilder app);

IApplicationBuilder

IApplicationBuilder 定義用於配置應用請求管道的類,ASP.NET Core 請求管道包含一系列請求委托,依次調用。

不清楚 Asp.Net Core 請求管道、中間件的讀者,對這一部分的內容可以參考

https://www.cnblogs.com/stulzq/p/7760648.html

https://www.cnblogs.com/JNLightGade/p/5737485.html

 

常見中間件順序

  1. 異常/錯誤處理
  2. HTTP 嚴格傳輸安全協議
  3. HTTPS 重定向
  4. 靜態文件服務器
  5. Cookie 策略實施
  6. 身份驗證
  7. 會話
  8. MVC

你可以添加其它參數 對 Configure 方法 進行重寫,如 IHostingEnvironment  、ILoggerFactory

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ... ... , ... ...)
        {
        ... ...
        }

3,中間件

Configure 方法 使用 IApplicationBuilder 來使用中間件

UseMapRun 三種使用方式

  • Use 使用中間件配置請求管道
  • Map 管道分支
  • Run 管道短路

對這一部分的內容可以參考

https://www.cnblogs.com/stulzq/p/7760648.html

https://www.cnblogs.com/JNLightGade/p/5737485.html

Asp.Net Core 內置很多中間件,用戶可以直接使用,將在文章后面介紹


4,使用中間件

默認創建 Asp.Net Core Mvc 程序時,會生成如下模板(Asp.Net Core 2.1)

在文章后面或詳細列出所有中間件並加以說明

       public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();    //是否開發環境
            }
            else
            {
                app.UseExceptionHandler("/Home/Error"); //出現錯誤跳轉到 /Error 頁面
                app.UseHsts();    //在文章后面的第39行可以看到解釋
            }

            app.UseHttpsRedirection();    //把 HTTP 重定向到 HTTPS
            app.UseStaticFiles();       //使用靜態文件
            app.UseCookiePolicy();      //與 Cookie 有關

            app.UseMvc(routes =>       //使用 MVP 頁面
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

可以直接使用 app.Use_______ 形式,直接使用內置中間件


 5,Configure 方法 的參數 IApplicationBuilder

Configure 方法配置請求管道使用了 IApplicationBuilder,下面將詳細列出 IApplicationBuilder 默認的方法、參數、特性等。

Properties(性質)

ApplicationServices

獲取或設置提供對應用程序服務容器的訪問的 IServiceProvider 提供程序

IServiceProvider : 定義用於檢索服務對象的機制,即為其他對象提供自定義支持的對象

可以參考 https://www.cnblogs.com/watermoon2/p/5075002.html

Properties

獲取可用於在中間件之間共享數據的 鍵/值 集合

Properties 是類型為 IDictionary<string,object>

ServerFeatures

獲取應用程序服務器提供的HTTP特性集

點擊 IFeatureCollection 詳細了解


Methods(方法)

Build()

建立此應用程序使用的委托來處理HTTP請求

Build 是一個 AspNetCore.Http.RequestDelegate 類型的委托

New()

創建一個 IApplicationBuilder 共享 Properties 的 IApplicationBuilder

Use(Func<RequestDelegate,RequestDelegate>)

將中間件委托添加到應用程序的請求管道中,對與自定義的中間件,使用此方法。


6, Extension Methods(拓展方法)--微軟提供的中間件

 使用方法 app._______

以下將列出 所有中間件及其重載方法、說明

注意 IApplicationBuilder 范圍很廣,包括應用啟動、依賴關系注入、路由、環境、配置、選項、日志記錄、處理錯誤等。

UseRequestLocalization(IApplicationBuilder)

添加 RequestLocalizationMiddleware 以基於客戶端提供的信息自動設置請求的區域性信息

UseRequestLocalization(IApplicationBuilder, RequestLocalizationOptions)

添加 RequestLocalizationMiddleware 以基於客戶端提供的信息自動設置請求的區域性信息

UseRequestLocalization(IApplicationBuilder, Action<RequestLocalizationOptions>)

添加 RequestLocalizationMiddleware 以基於客戶端提供的信息自動設置請求的區域性信息

UseRequestLocalization(IApplicationBuilder, String[])

添加 RequestLocalizationMiddleware 以基於客戶端提供的信息自動設置請求的區域性信息

UseAuthentication(IApplicationBuilder)

將 AuthenticationMiddleware 添加到指定的 IApplicationBuilder ,它支持身份驗證功能

UseBrowserLink(IApplicationBuilder)

此方法被調用以在應用程序中啟用瀏覽器鏈接。它注冊了一個方法工廠,為每個請求創建 BrowserLinkMiddleware。

筆者注:

瀏覽器鏈接是Visual Studio中的一項功能,可在開發環境和一個或多個Web瀏覽器之間創建通信通道。您可以使用瀏覽器鏈接一次在多個瀏覽器中刷新Web應用程序,這對於跨瀏覽器測試很有用

UseIdentity(IApplicationBuilder)

此方法已過時,將在將來的版本中刪除。推薦的替代方案是使用 UseAuthentication (在列表的第5行)

UseConnections(IApplicationBuilder, Action<ConnectionsRouteBuilder>)

向 IApplicationBuilder 請求執行管道添加對 ASP.NET Core 連接處理程序的支持

UseCookieAuthentication(IApplicationBuilder)

已經過時,不再推薦使用。官方建議使用 identity 配置(在列表的第5行)

UseCookieAuthentication(IApplicationBuilder, CookieAuthenticationOptions)

已經過時,不再推薦使用。官方建議使用 identity 配置(在列表的第5行)

UseCookiePolicy(IApplicationBuilder)

將 CookiePolicyMiddleware 處理程序添加到指定的 IApplicationBuilder,它支持 cookie 策略功能

UseCookiePolicy(IApplicationBuilder, CookiePolicyOptions)

將 CookiePolicyMiddleware 處理程序添加到指定的 IApplicationBuilder,它支持 cookie 策略功能

UseCors(IApplicationBuilder)

將CORS中間件添加到Web應用程序管道以允許跨域請求

這是一個靜態方法,類型為 Microsoft.AspNetCore.Builder.IApplicationBuilder

UseCors(IApplicationBuilder, Action<CorsPolicyBuilder>)

將CORS中間件添加到Web應用程序管道以允許跨域請求

這是一個靜態方法,類型為 Microsoft.AspNetCore.Builder.IApplicationBuilder

UseCors(IApplicationBuilder, String)

將CORS中間件添加到Web應用程序管道以允許跨域請求

這是一個靜態方法,類型為 Microsoft.AspNetCore.Builder.IApplicationBuilder

UseDefaultFiles(IApplicationBuilder)

為給定的請求路徑啟用默認文件映射

UseDefaultFiles(IApplicationBuilder, DefaultFilesOptions)

為給定的請求路徑啟用默認文件映射

  筆者注:

    參數 DefaultFilesOptions 選擇默認文件名的選項,類型為 DefaultFilesOptions

    返回 IApplicationBuilder

UseDefaultFiles(IApplicationBuilder, String)

為給定的請求路徑啟用默認文件映射

  筆者注:

    參數 String為 相對請求路徑

    返回 IApplicationBuilder

UseDeveloperExceptionPage(IApplicationBuilder)

從管道捕獲同步和異步異常實例,並生成HTML錯誤響應

UseDeveloperExceptionPage(IApplicationBuilder, DeveloperExceptionPageOptions)

從管道捕獲同步和異步異常實例,並生成HTML錯誤響應

UseDirectoryBrowser(IApplicationBuilder)

在當前路徑上啟用目錄瀏覽

筆者注:

對於非程序運行目錄或特殊目錄,用戶通過瀏覽器打開該目錄時,會列出目錄內容。

UseDirectoryBrowser(IApplicationBuilder, DirectoryBrowserOptions)

在當前路徑上啟用目錄瀏覽,同上

UseDirectoryBrowser(IApplicationBuilder, String)

在當前路徑上啟用目錄瀏覽,同上

UseExceptionHandler(IApplicationBuilder)

向管道添加中間件,該中間件將捕獲異常、記錄異常並在備用管道中重新執行請求。如果響應已經啟動,請求將不被重新執行

UseExceptionHandler(IApplicationBuilder, ExceptionHandlerOptions)

向管道添加中間件,該中間件將捕獲異常、記錄異常並在備用管道中重新執行請求。如果響應已經啟動,請求將不被重新執行

UseExceptionHandler(IApplicationBuilder, Action<IApplicationBuilder>)

向管道添加中間件,該中間件將捕獲異常、記錄異常並在備用管道中重新執行請求。如果響應已經啟動,請求將不被重新執行

UseExceptionHandler(IApplicationBuilder, String)

向管道添加中間件,該中間件將捕獲異常、記錄異常並在備用管道中重新執行請求。如果響應已經啟動,請求將不被重新執行

UseFacebookAuthentication(IApplicationBuilder)

使用FaceBook身份認證

UseFacebookAuthentication(IApplicationBuilder, FacebookOptions)

使用FaceBook身份認證

UseFileServer(IApplicationBuilder)

為當前目錄中的當前請求路徑啟用所有靜態文件中間件(目錄瀏覽除外)  --注意四者不同點

UseFileServer(IApplicationBuilder, FileServerOptions)

使給定的選項所有靜態文件中間件                    --注意四者不同點

UseFileServer(IApplicationBuilder, Boolean)

是否為當前目錄中的當前請求路徑啟用所有靜態文件中間件(目錄瀏覽除外)  --注意四者不同點

UseFileServer(IApplicationBuilder, String)

為來自同名目錄的給定請求路徑啟用所有靜態文件中間件(目錄瀏覽除外    --注意四者不同點

UseForwardedHeaders(IApplicationBuilder)

轉發代理到當前請求報頭

UseForwardedHeaders(IApplicationBuilder, ForwardedHeadersOptions)

轉發代理到當前請求報頭

UseGoogleAuthentication(IApplicationBuilder)

使用 Google 進行身份認證

UseGoogleAuthentication(IApplicationBuilder, GoogleOptions)

使用 Google 進行身份認證

UseHostFiltering(IApplicationBuilder)

增加了過濾請求允許主機頭的中間件,無效的請求將被拒絕並返回 400 狀態代碼

UseHsts(IApplicationBuilder)

添加了使用HSTS的中間件,它添加了嚴格的傳輸安全標頭

UseHttpMethodOverride(IApplicationBuilder)

允許傳入的POST請求以頭文件中指定的類型重寫方法類型

UseHttpMethodOverride(IApplicationBuilder, HttpMethodOverrideOptions)

允許傳入POST請求以表單指定的類型重寫方法類型

UseHttpsRedirection(IApplicationBuilder)

添加用於將HTTP請求重定向到HTTPS的中間件。

UseJwtBearerAuthentication(IApplicationBuilder)

UseJwtBearerAuthentication 是過時的認證方案,官方已經不推薦使用

UseJwtBearerAuthentication(IApplicationBuilder, JwtBearerOptions)

UseJwtBearerAuthentication 是過時的認證方案,官方已經不推薦使用

Map(IApplicationBuilder, PathString, Action<IApplicationBuilder>)

根據給定的請求路徑的匹配來分支請求管道。如果請求路徑從給定路徑開始,則執行分支

MapWhen(IApplicationBuilder, Func<HttpContext,Boolean>, Action<IApplicationBuilder>)

根據給定的預測結果對請求流水線進行分支

UseMicrosoftAccountAuthentication(IApplicationBuilder)

UseMicrosoftAccountAuthentication 過時,官方不再推薦使用

UseMicrosoftAccountAuthentication(IApplicationBuilder, MicrosoftAccountOptions)

UseMicrosoftAccountAuthentication 過時,官方不再推薦使用

UseMvc(IApplicationBuilder)

將 MVC 添加到 請求執行管道中

UseMvc(IApplicationBuilder, Action<IRouteBuilder>)

將 MVC 添加到請求執行管道中,並配置路由,使用示例

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
UseMvcWithDefaultRoute(IApplicationBuilder)

使用默認的路由模板

筆者注:

在你創建Mvc應用時,就已經默認生成

默認的路由模板格式 {controller=Home}/{action=Index}/{id?} 

使用此中間件的效果等同上一個表格的示例

UseOAuthAuthentication(IApplicationBuilder)

UseOAuthAuthentication 過時,官方不推薦使用

UseOAuthAuthentication(IApplicationBuilder, OAuthOptions)

UseOAuthAuthentication 過時,官方不推薦使用

UseOpenIdConnectAuthentication(IApplicationBuilder)

UseOpenIdConnectAuthentication  過時,官方不推薦使用

UseOpenIdConnectAuthentication(IApplicationBuilder, OpenIdConnectOptions)

UseOpenIdConnectAuthentication  過時,官方不推薦使用

UseResponseCompression(IApplicationBuilder)

添加用於動態壓縮HTTP響應的中間件

UseRewriter(IApplicationBuilder)

檢查給定URL是否匹配規則和條件(正則表達式),並修改匹配的HTTP語境。

UseRewriter(IApplicationBuilder, RewriteOptions)

檢查給定URL是否匹配規則和條件(正則表達式),並修改匹配的HTTP語境

UseRouter(IApplicationBuilder, IRouter)

創建路由規則並添加到路由表中

UseRouter(IApplicationBuilder, Action<IRouteBuilder>)

創建路由規則並添加到路由表中

Run(IApplicationBuilder, RequestDelegate)

使管道短路

筆者注:

當管道碰到Run使,無論后面是否還有其它中間件,都會忽略

UseSession(IApplicationBuilder)

添加 Session 以自動啟用應用程序的會話狀態

UseSession(IApplicationBuilder, SessionOptions)

添加 Session 以自動啟用應用程序的會話狀態

UseSignalR(IApplicationBuilder, Action<HubRouteBuilder>)

添加 SignalR 到請求管道中

UseSpa(IApplicationBuilder, Action<ISpaBuilder>)

通過返回單頁應用程序(SPA)的默認頁面,處理從中間件鏈中此點開始的所有請求。這個中間件應該放在鏈的末尾,以便其他提供靜態文件、MVC操作等的中間件優先

UseStaticFiles(IApplicationBuilder)

為當前請求路徑啟用靜態文件服務

UseStaticFiles(IApplicationBuilder, StaticFileOptions)

為當前請求路徑啟用靜態文件服務

UseStaticFiles(IApplicationBuilder, String)

為當前請求路徑啟用靜態文件服務

UseStatusCodePages(IApplicationBuilder)

添加具有默認響應處理程序的中間件,該處理程序檢查400和599之間沒有主體時的狀態代碼,以進行響應

UseStatusCodePages(IApplicationBuilder, StatusCodePagesOptions)

同上

UseStatusCodePages(IApplicationBuilder, Action<IApplicationBuilder>)

同上

UseStatusCodePages(IApplicationBuilder, Func<StatusCodeContext,Task>)

同上

UseStatusCodePages(IApplicationBuilder, String, String)

同上

UseStatusCodePagesWithRedirects(IApplicationBuilder, String)

同上

UseStatusCodePagesWithReExecute(IApplicationBuilder, String, String)

同上

UseTwitterAuthentication(IApplicationBuilder)

使用 Twitter 進行身份認證,官方不再推薦這種過時用法

UseTwitterAuthentication(IApplicationBuilder, TwitterOptions)

使用 Twitter 進行身份認證,官方不再推薦這種過時用法

Use(IApplicationBuilder, Func<HttpContext,Func<Task>,Task>)

將一個中間件委托添加到應用程序的請求管道中

UseMiddleware(IApplicationBuilder, Type, Object[])

將一個中間件添加到應用程序的請求管道中,注意與上面的區別

UseMiddleware<TMiddleware>(IApplicationBuilder, Object[])

將一個中間件添加到應用程序的請求管道中,注意與上面的區別

UsePathBase(IApplicationBuilder, PathString)

加中間件,從中間件從請求路徑中提取指定的路徑庫並將其附加到請求路徑庫

UseWhen(IApplicationBuilder, Func<HttpContext,Boolean>, Action<IApplicationBuilder>)

有條件地在請求管道中創建一個分支,並將其重新連接到主管道

UseWebpackDevMiddleware(IApplicationBuilder, WebpackDevMiddlewareOptions)

英文原文如下

Enables Webpack dev middleware support. This hosts an instance of the Webpack compiler in memory in your application so that you can always serve up-to-date Webpack-built resources without having to run the compiler manually. Since the Webpack compiler instance is retained in memory, incremental compilation is vastly faster that re-running the compiler from scratch.

Incoming requests that match Webpack-built files will be handled by returning the Webpack compiler output directly, regardless of files on disk. If compilation is in progress when the request arrives, the response will pause until updated compiler output is ready.

UseWebSockets(IApplicationBuilder)

WebSockets服務

UseWebSockets(IApplicationBuilder, WebSocketOptions)

WebSockets服務

UseWelcomePage(IApplicationBuilder)

添加一個歡迎頁面到請求管道中

UseWelcomePage(IApplicationBuilder, WelcomePageOptions)

添加一個歡迎頁面到請求管道中,可以自己配置歡迎頁面

UseWelcomePage(IApplicationBuilder, PathString)

添加一個歡迎頁面到請求管道中,自定義歡迎頁面的路徑

UseWelcomePage(IApplicationBuilder, String)

添加一個歡迎頁面到請求管道中

UseSpaStaticFiles(IApplicationBuilder)

將應用程序配置為為單頁應用程序(SPA)提供靜態文件

UseSpaStaticFiles(IApplicationBuilder, StaticFileOptions)

將應用程序配置為為單頁應用程序(SPA)提供靜態


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM