天天看點

《ASP.ENT Core 與 RESTful API 開發實戰》(第3章)-- 讀書筆記(下)

要通路配置,需要使用 ConfigurationBinder 類,它實作了 IConfigurationBuilder 接口,該接口包括兩個重要的方法:

通路 JSON 配置檔案

在 Main 函數中通路

添加其他類型的配置檔案:

AddXmlFile

AddIniFile

AddInMemoryCollection

AddEnvironmentVariables

另外需要注意的是:

配置項鍵名不區分大小寫

同一類型的配置源可以添加多個

可以通過雙下劃線代替冒号

如果希望改變上述添加配置的方式,可以建立 ConfigurationBuilder 執行個體并調用 IWebHostBuilder 接口的 UseConfiguration 方法

除了使用 UseConfiguration 方法之外,還可以使用 IWebHostBuilder 接口的 ConfigureAppConfiguration 方法,通過該方法,可以擷取目前的運作環境,并加載與環境相關的配置檔案

自定義配置源,需要用到兩個接口,即 IConfigurationSource 和 IConfigurationProvider

由于 ASP.NET Core 提供的配置源中并不支援對 web.config 或 app.config 等這種傳統類型的配置檔案的通路,是以需要建立自定義配置源來通路,當配置源基于檔案時,可以使用 FileConfigurationSource 和 FileConfigurationProvider

重新加載配置可以調用 IConfiguration 或 IConfigurationRoot 的 Reload 方法,即 config.Reload(),或者在添加配置源時指定 reloadOnChange 屬性

強類型對象,我們希望将多個配置映射為具有同名屬性的 .NET 對象,需要使用 Options 模式,在 ConfigureServices 方法内添加

這樣不僅将配置資訊映射到 UISetting 類,而且也會将 IOptions 對象放入目前應用程式的依賴注入容器中,是以,可以在 Controller 中注入該對象,并通過它的 Value 屬性擷取 IOptions 所包含的對象

最後,需要說明一點的是,要映射的類必須具有一個預設的構造函數,即公共且無參數的構造函數,否則無法編譯通過

要将配置添加到容器,還可以使用 IServiceCollection.Configure 方法的另一個重載形式,它接受一個 Action 類型的參數

除了 Configure 方法外,還可以使用 PostConfigure 方法對 TOptions 進行後續的修改操作,此方法會在所有的 Configure 方法後執行

日志包括兩種類型:

系統日志:系統在運作時向外輸出的記錄日志

使用者記錄日志:由開發人員在程式适當的位置調用與日志功能相關的 API 輸出的日志

ASP.NET Core 架構内部內建了日志的功能,主要由以下幾個接口組成:

Ilogger

IloggerProvider

IloggerFactory

Log 方法的第一個參數指明了這條資訊的級别,ASP.NET Core 日志系統定義了6個級别:

Trace

Debug

Information

Warning

Error

Critical

當 ASP.NET Core 應用程式運作起來,日志元件就會被添加到其依賴注入容器中,是以隻要在合适的位置将 ILogger 對象注入進來,即可使用它來記錄日志

在建立 WebHost 時,調用了 CreateDefaultBuilder 方法,在這裡可以使用 ILoggingBuilder 接口的擴充方法 AddConsole、AddDebug、AddEnventSourceLogger 分别添加3個日志提供程式,它們提供了不同的輸出位置和形式

ASP.NET Core 預設提供了以下6種日志提供程式:

Console

EventSource

EventLog

TraceSource

Azure App Service

如果不需要 CreateDefaultBuilder 預設添加的3個日志提供程式,可以調用 ILoggerProvider 接口的 ClearProviders 方法,然後再添加所需要的日志提供程式

ILoggerFacotry 接口用于建立 ILogger 類型的對象

ILoggerFacotry 與 ILogger 一樣,可以在程式任何位置注入使用

将日志資訊進行分組,需要使用 Scope 來實作,ILogger 接口有一個方法,BeginScope(TState state) 用于建立 Scope

要在 scope 中輸出日志,除了建立 scope 外,還要在 ILoggerProvider 對象中啟用這一功能,在添加日志提供程式時可以指定該 ILoggerProvider 的一些選項,例如 ControllerProvidre,隻要設定 ConsoleLoggerOptions 的 IncludeScopes 屬性為 true 即可

要設定最低日志級别,同樣需要在 ConfigureLogging 方法中進行設定,此時隻要調用 ILoggingBuilder 接口的 SetMinimumLevel 方法即可

值得注意的是,在 LogLevel 的枚舉定義中,還有一個值是 None,該值高于其他所有值,如果指定這個值為最低級别,則所有日志都不會輸出

ILoggerBuilder 接口還提供了 AddFilter 方法,顯示滿足條件的日志

預設情況下,在 appsettings.json 檔案中包含了對日志的配置資訊,可以調用 AddConfiguration 方法将日志配置加載應用到程式的日志系統中

異常處理,ASP.NET Core 中有兩個中間件用來處理異常:

DeveloperExceptionPageMiddleware

ExceptionHandlerMiddleware

它們可以通過 Configure 方法中的 IApplicationBuilder 提供的 UseDeveloperExceptionPage 和 UseExceptionHandler 添加

需要強調的是,這兩個中間件都應該在 Configure 方法一開始就添加進來,否則任何在它們之前的代碼所産生的錯誤都不會被它們處理

另外,由這些中間件所輸出的響應的 HTTP 狀态碼均為 500 Internal Server Error

預設情況下,ASP.NET Core 對于狀态碼沒有提供具體的細節,使用 StatusCodePagesMiddleware 則能夠自定義關于這些錯誤狀态碼的細節

如果要自定義顯示結果,則可以調用 UseStatusCodePages 的另一個重載形式

《ASP.ENT Core 與 RESTful API 開發實戰》(第3章)-- 讀書筆記(下)
《ASP.ENT Core 與 RESTful API 開發實戰》(第3章)-- 讀書筆記(下)

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。

歡迎轉載、使用、重新釋出,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。

如有任何疑問,請與我聯系 ([email protected]) 。