天天看点

《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]) 。