最近在学习蒋金楠的ASP.NET Core 系列 真的是长知识了,博主地址:https://www.cnblogs.com/artech
一、显示开发者异常页面
由于ASP.NET Core应用是面向多个客户端请求,如果一个错误,它并不会影响整个应用的终止,出于安全的考虑,客户端在默认情况下应该得不到报错信息,这无疑对我们开发者有着不好的体验,对于生产环境,我们非常希望有针对性的错误体验,ASP.NET Core提供了d相应的中间件帮助我们定制错误信息,这些中间件都在“Microsoft.AspNetCore.Diagnostics”这个NuGet包中。
由于应用并没有中断,浏览器上也并没有显示任何具有针对性的错误信息,开发人员在进行查错纠错的时候如何准确定位到作为错误根源的那一行代码呢?具体来说,我们又有两种解决方案,一种就是利用Log,因为ASP.NET Core在进行请求处理时出现的任何错误都会被写入日志,所以我们可以通过注册相应的LoggerProvider(比如注册一个ConsoleLoggerProvider将日志直接写入宿主应用的控制台)到来获取写入的错误日志。
至于另一种解决方案,就是直接显示一个包含错误相应信息的错误页面,由于这个页面是在开发环境给开发者看的,所以我们将这个页面称为“开发者异常页面(Developer Exception Page)”。针对页面的自动呈现是利用一个名为DeveloperExceptionPageMiddleware的中间件来完成的,我们可以调用ApplicationBuilder的扩展方法UseDeveloperExceptionPage来注册这个中间件。
public static void Main(string[] args) { new WebHostBuilder() .UseKestrel() .Configure(app => app.UseDatabaseErrorPage(). Run(context => Task.FromException(new InvalidOperationException("APPLICATION ERROR")))) .Build() .Run(); CreateWebHostBuilder(args).Build().Run(); }
开发者可以不仅可以看到通过DeveloperExceptionPageMiddleware中间件呈现的错误,详细的内容往往会带来一些敏感信息,所以务必记住只有在开发环境才能注册这个中间件,如下所示的代码片段体现了针对DeveloperExceptionPageMiddleware中间件正确的注册方式。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } }