ASP.NET Core中Startup類、Configure()方法及中介軟體詳解
ASP.NET Core 程式啟動過程如下
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.jb51.net/article/234554.htm
https://www.jb51.net/article/234557.htm
常見中介軟體順序
- 異常/錯誤處理
- HTTP 嚴格傳輸安全協議
- HTTPS 重定向
- 靜態檔案伺服器
- Cookie 策略實施
- 身份驗證
- 會話
- MVC
你可以新增其它引數 對 Configure 方法 進行重寫,如IHostingEnvironment 、ILoggerFactory
public void Configure(IApplicationBuilder app,IHostingEnvironment env,... ...,... ...) { ... ... }
3,中介軟體
Configure 方法 使用IApplicationBuilder 來使用中介軟體
有 Use 、Map、Run 三種使用方式
- Use 使用中介軟體配置請求管道
- Map 管道分支
- Run 管道短路
對這一部分的內容可以參考
https://www.jb51.net/article/234554.htm
https://www.jb51.net/article/234557.htm
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.jb51.net/article/234560.htm |
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._______
以下將列出 所有中介軟體及其過載方法、說明
SWUYe注意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請求以表單指定www.cppcns.com的型別重寫方法型別 |
UseHttpsRedirection(IApplicationBuilder) | 新增用於將HTTP請求重定向到HTTPS的中介軟體。 |
UseJwtBearerAuthentication(IApplicationBuilder) | UseJwtBearerAuthentication 是過時的認證方案,官方已經不http://www.cppcns.com推薦使用 |
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 => |
UseMvcWithDefaultRoute(IApplicationBuilder) | 使用預設的路由模板 筆者注: 在你建立Mvc應用時,就已經預設生成 預設的路由模板格式{controller=Home}/{action=Index}/{id?} 使用此中介軟體的效果等同上一個表格的示例 |
UseOAuthAuthentication(IApplicationBuilder) | UseOAuthAuthentication 過時,官http://www.cppcns.com方不推薦使用 |
UseOAuthAuthentication(IApplicationBuilder,OAuthOptions) | UseOAuthAuthentication 過時,官方不推薦使用 |
UseOpenIdConnectAuthentication(IApplicationBuildhttp://www.cppcns.comer) | 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) | 同上 |
UseTwitterAuthentication(IApplicationBuilder) | 使用 Twitter 進行身份認證,官方不再推薦這種過時用法 |
UseTwitterAuthentication(IApplicationBuilder,TwitterOptions) | 使用 Twitter 進行身份認證,官方不再推薦這種過時用法 |
Use(IApplicationBuilder,Func<Task>,Task>) | 將一箇中間件委託新增到應用程式的請求管道中 |
UseMiddleware(IApplicationBuilder,Type,Object[]) | 將一箇中間件新增到應用程式的請求管道中,注意與上面的區別 |
UseMiddleware<TMiddleware>(IApplicationBuilder,Object[]) | 將一箇中間件新增到應用程式的請求管道中,注意與上面的區別 |
UsePathBase(IApplicationBuilder,PathString) | 加中介軟體,從中介軟體從請求路徑中提取指定的路徑庫並將其附加到請求路徑庫 |
UseWhen(IApplicationBuilder,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)提供靜態 |
到此這篇關於ASP.NET Core中Startup類、Configure()方法及中介軟體詳解的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援我們。