從官方文件出發,把 ASP.NET Core 功能及用法,以實作方式記錄下來。
- Windows 10
- .NET Core SDK 2.1.505
- VS Code 1.33.x
基本功能實作就用 Razor Pages 即可。
建立無靜態檔的簡易專案:
- 執行 projects 目錄下的 new-web.bat,用法:
new-web <專案名稱(根 namespace)>
。 - 會自動執行 dotnet run 及開啟瀏覽器,待啟動完成後重整瀏覽器。
建立無靜態檔的簡易專案:
- 執行 projects 目錄下的 new-mvc.bat,用法:
new-mvc <專案名稱(根 namespace)>
。 - 會自動執行 dotnet run 及開啟瀏覽器,待啟動完成後重整瀏覽器。
建立完整 MVC 專案
dotnet new mvc -n <專案名稱(會做為根 namespace, 也為輸出目錄)>
建立完整 Web API 專案
dotnet new webapi -n <專案名稱(會做為根 namespace, 也為輸出目錄)>
dotnet run
- 開啟 Razor Pages : http://localhost:5000/
- 開啟 MVC : https://localhost:5001/
- 開啟 Web API : https://localhost:5001/api/Values
專案統一放在 projects 目錄中。
-
不用 Startup.cs -- OneHostNoStartup
WebHost 可取代 Startup 的 ConfigureServices() 和 Configure()。
-
用 IStartupFilter 註冊中介軟體 -- UseIStartupFilter
用 IStartupFilter 註冊中介軟體,以確保在處理管線的開頭或結尾執行。
-
基本相依性注入 -- DependencyInjection
-
平台提供的內建服務 -- FrameworkProvidedDIServices
應用程式初始化後,使用 IServiceCollection 已提供一些內建服務。
-
動態建立物件 -- ActivatorUtilities
動態建立物件,並支援該物件的相依性注入。
-
啟用路由中介軟體 -- UseRoutingMiddleware
-
用 DataTokens 定義路由屬性 -- UsingRouteDataTokens
-
路由的條件約束 -- RouteConstraint
應用程式啟動時會讀取 ASPNETCORE_ENVIRONMENT 環境變數,可利用它來客製執行環境。
平台預設支援下列三個值:Development、Staging 和 Production。如果未設定 ASPNETCORE_ENVIRONMENT,則預設為 Production。
-
取得環境設定值 -- [UseIHostingEnvironment] (https://github.com/yingclin/practical-aspnetcore/tree/master/projects/UseIHostingEnvironment)
-
本機開發設定值 -- LaunchSettings
-
依環境套用的 Startup 類別 -- EnvironmentBasedStartupClass
-
依環境套用的 Startup 方法 -- EnvironmentBasedStartupMethod
應用程式設定是基於 設定提供者
(Configuration Providers) 所提供的鍵值對組來建立。
設定提供者會從各種來源將設定資料讀取到設定中:
Azure Key Vault, 命令列引數, 自訂提供者,
目錄檔案, 環境變數, 記憶體中的 .NET 物件, 設定檔。
-
被壓平的階層式設定資料 -- FlattenedHierarchicalKey
-
平台內建的設定提供者 -- ConfigurationProviders
-
命令列設定提供者 -- CommandLineConfigurationProvider
-
檔案設定提供者 -- FileConfigurationProvider
-
記憶體設定提供者 -- MemoryConfigurationProvider
-
設定內容轉換到類別 -- ConfigurationConvertToClass
-
基本的選項設定 -- SimpleOptions
-
使用委派(delegate)來設定簡單的選項 -- OptionsConfiguredByDelegate
-
使用 IOptionsSnapshot 重新載入設定資料 -- SnapshotOptions
-
IConfigureNamedOptions 提供具名選項的支援 -- NamedOptions
- 從 JavaScript 傳值並載入 View components -- PassingJavascriptValuesToViewComponents