ASP.NET Core 應用是在其 Main 方法中建立 Web 服務器的控制檯應用:web
Main 方法調用 WebHost.CreateDefaultBuilder,經過生成器模式來建立web主機.生成器提供定義 Web 服務器(例如,UseKestrel)和啓動類 (UseStartup) 的方法。 在前面的例子中,自動分配了 Kestrel Web 服務器。ASP.NET Core 的 Web 主機嘗試在 IIS 上運行(若是可用)。 對於其餘 Web 服務器(如 HTTP.sys),可經過調用相應的擴展方法來使用。 在下一節對 UseStartup 進行了更深刻的介紹。服務器
IWebHostBuilder 是 WebHost.CreateDefaultBuilder 調用的返回類型,它提供了許多可選方法。 其中的一些方法包括用於在 HTTP.sys 中託管應用的 UseHttpSys ,以及用於指定根內容目錄的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 對象,該對象託管應用並開始偵聽 HTTP 請求。app
WebHostBuilder 提供了許多可選方法,其中包括用於在 IIS 和 IIS Express 中進行託管的 UseIISIntegration,以及用於指定根內容目錄的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 對象,該對象託管應用並開始偵聽HTTP 請求。框架
Startup 類用於定義請求處理管道和配置應用所需的任何服務異步
ConfigureServices 定義應用所使用的服務(如 ASP.NET Core MVC、Entity Framework Core 和標識)。 Configure定義在請求管道中調用的中間件。函數
public class Startup { // This method gets called by the runtime. Use this method // to add services to the container. public void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. Use this method // to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { } }
Statusup類配置服務和請求管道ui
Statusup類包括ConfigureServices方法以配置應用的服務.Configure方法以建立應用的請求處理管道this
在 Startup 類中注入依賴關係的常見用途爲注入:spa
private readonly IHostingEnvironment _env; private readonly IConfiguration _config; private readonly ILoggerFactory _loggerFactory; public Startup(IHostingEnvironment env, IConfiguration config, ILoggerFactory loggerFactory) { _env = env; _config = config; _loggerFactory = loggerFactory; }
ConfigureServices方法命令行
調用全部Add{Service}方法,而後調用全部services.Configure{Service}方法。
將服務添加到服務容器,使其應用和Config方法中可用,這些服務是經過依賴關係注入或IApplicationBuilder.ApplicationServices 解析。
Configure方法
configure方法用於指定應用響應HTTP請求的方式。可經過將中間件組件添加到IApplicationBuilder實例來配置請求管道。Configure 方法可以使用 IApplicationBuilder ,但未在服務容器中註冊。 託管建立IApplicationBuilder 並將其直接傳遞到 管道 。Configure 方法可以使用 IApplicationBuilder ,但未在服務容器中註冊。 託管建立IApplicationBuilder 並將其直接傳遞到 Configure 。
使用Use擴展方法將中間件組件添加到請求管道,
使用Startup篩選器擴展Startup
在應用的 Configure 中間件管道的開頭或末尾使用 IStartupFilter 來配置中間件。 IStartupFilter 有助於確保
中間件在應用請求處理管道的開始或結束時由庫添加的中間件以前或以後運行
IStartupFilter 實現單個方法(即 Configure),該方法接收並返回 Action<IApplicationBuilder> 。
IApplicationBuilder 定義用於配置應用請求管道的類。 有關詳細信息,請參閱使用 IApplicationBuilder 建立中
間件管道。
在請求管道中,每一個 IStartupFilter 實現一個或多箇中間件。 篩選器按照添加到服務容器的順序調用。 篩選
器可在將控件傳遞給下一個篩選器以前或以後添加中間件,從而附加到應用管道的開頭或末尾。
IStartupFilter 實現單個方法(即 Configure),該方法接收並返回 Action<IApplicationBuilder> 。
IApplicationBuilder 定義用於配置應用請求管道的類。
IStartupFilter 在 IWebHostBuilder.ConfigureServices 中的服務容器中註冊
中間件執行順序由 IStartupFilter 註冊順序設置:多個 IStartupFilter 實現可能與相同的對象進行交互。 若是順序很重要,請將它們的 IStartupFilter 服務註冊進行排序,以匹配其中間件應有的運行順序。庫可能添加包含一個或多個 IStartupFilter 實現的中間件,這些實如今向 IStartupFilter 註冊的其餘應用中間件以前或以後運行。 若要在庫的 IStartupFilter 添加中間件以前調用 IStartupFilter 中間件,請在將庫添加到服務容器以前定位服務註冊。 若要在此後調用,請在添加庫以後定位服務註冊。