NuGet包"Microsoft.AspNetCore.Diagnostics"中提供了几个与异常处理相关的中间件,我们可以利用它们将原生的或者定制的错误信息作为响应内容发送给客户端.<错误页面的N种呈现方式>演示了几个简单的实例使读者大致了解这些中间件的作用,现在我们来演示几个高阶用法.本文提供的示例演示已经同步到<ASP.NET Core 6框架揭秘-实例演示版>) [S2108]利用IDeveloperPageExceptionFilter定制开发者异常页…
ASP.NET Core应用具有很多读取文件的场景,如读取配置文件.静态Web资源文件(如CSS.JavaScript和图片文件等).MVC应用的视图文件,以及直接编译到程序集中的内嵌资源文件.这些文件的读取都需要使用一个IFileProvider对象.IFileProvider对象构建了一个抽象的文件系统,我们不仅可以利用该系统提供的统一API来读取各种类型的文件,还能及时监控目标文件的变化.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [S401] 输出…
.NET的配置支持多样化的数据源,我们可以采用内存的变量.环境变量.命令行参数.以及各种格式的配置文件作为配置的数据来源.在对配置系统进行系统介绍之前,我们通过几个简单的实例演示一下如何将具有不同来源的配置数据构建为一个统一的配置对象,并以相同的方式读取具体配置节的内容.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [501]以键值对形式读取配置(源代码) [502]读取结构化配置(源代码) [503]将结构化配置绑定为对象(源代码) [504]将配置定义在…
我们倾向于将IConfiguration对象转换成一个具体的对象,以面向对象的方式来使用配置,我们将这个转换过程称为配置绑定.除了将配置树叶子节点配置节的绑定为某种标量对象外,我们还可以直接将一个配置节绑定为一个具有对应结构的符合对象.除此之外,配置绑定还支持针对数据.集合和字典类型的绑定.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [507]绑定配置项的值(源代码) [508]类型转换器在配置绑定中的应用(源代码) [509]复合对象的配置绑定(源代码)…
依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中.除了可以采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象,这篇文章演示几种典型的编程模式.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [601]将配置绑定为Options对象(源代码) [602]具名Options的注册和提取(源代码) [603]Options与配置源的实时同步(匿名Options)(源代码)…
在整个软件开发维护生命周期内,最难的不是如何将软件系统开发出来,而是在系统上线之后及时解决遇到的问题.一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案,一个更好的程序员能够根据当前的运行状态预知未来可能发生的问题,并将问题扼杀在摇篮中.合理地利用诊断手段能够帮助我们有效地纠错和排错.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [S701]TraceSource跟踪日志(源代码) [S702]基于等级的日志过滤(源代码) [S703…
一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案,一个更好的程序员能够根据当前的运行状态预知未来可能发生的问题,并将问题扼杀在摇篮中.诊断跟踪能够帮助我们有效地纠错和排错<几种基本诊断跟踪编程方式>提供了7个实例演示了针对TraceSource.EventSource和DiagnosticSource的基本用法,其实它们还具有一个更"高级"的使用方式.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [S…
<诊断跟踪的几种基本编程方式>介绍了四种常用的诊断日志框架.其实除了微软提供的这些日志框架,还有很多第三方日志框架可供我们选择,比如Log4Net.NLog和Serilog 等.虽然这些框架大都采用类似的设计,但是它们采用的编程模式具有很大的差异.为了对这些日志框架进行整合,微软创建了一个用来提供统一的日志编程模式的日志框架.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [S801]将日志输出到控制台和调试窗口(源代码) [S802]利用ILog…
为了对各种日志框架进行整合,微软创建了一个用来提供统一的日志编程模式的日志框架.<日志的基本编程模式>以实例演示的方式介绍了日志的基本编程模式,现在我们来补充几种"进阶"用法.(本篇提供的实例已经汇总到<ASP.NET Core 6框架揭秘-实例演示版>) [S808]利用配置定义日志过滤规则(源代码) [S809]利用日志范围输出调用链(源代码) [S810]LoggerMessage的应用(源代码) [S812]基于Activity的日志范围(源代码) [S…
针对控制台的ILogger实现类型为ConsoleLogger,对应的ILoggerProvider实现类型为ConsoleLoggerProvider,这两个类型都定义在 NuGet包"Microsoft.Extensions.Logging.Console"中.ConsoleLogger要将一条日志输出到控制台上,首选要解决的是格式化的问题,具体来说是如何将日志消息的内容荷载和元数据(类别.等级和事件ID等)格式化成呈现在控制台上的文本.针对日志的格式化由ConsoleFormat…