ASP.NET Core 6框架中,如何实现异常处理高阶用法的高级技巧?
摘要:NuGet包“Microsoft.AspNetCore.Diagnostics”中提供了几个与异常处理相关的中间件,我们可以利用它们将原生的或者定制的错误信息作为响应内容发送给客户端。《错误页面的N种呈现方式》演示了几个简单的实例使读者大致
NuGet包“Microsoft.AspNetCore.Diagnostics”中提供了几个与异常处理相关的中间件,我们可以利用它们将原生的或者定制的错误信息作为响应内容发送给客户端。《错误页面的N种呈现方式》演示了几个简单的实例使读者大致了解这些中间件的作用,现在我们来演示几个高阶用法。本文提供的示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》)
[S2108]利用IDeveloperPageExceptionFilter定制开发者异常页面 (源代码)
[S2109]针对编译异常的处理(默认)(源代码)
[S2110]针对编译异常的处理(定义源代码输出行数)(源代码)
[S2111]利用IExceptionHandlerFeature特性提供错误信息(源代码)
[S2112]清除缓存响应报头(源代码)
[S2113]针对404响应的处理(源代码)
[S2114]利用IStatusCodePagesFeature特性忽略异常处理(源代码)
[2108]利用IDeveloperPageExceptionFilter定制开发者异常页面DeveloperExceptionPageMiddleware中间件在默认情况下总是会呈现一个包含详细信息的错误页面,但是我们可以利用注册的IDeveloperPageExceptionFilter对象在呈现错误页面之前做一些额外的异常处理操作,甚至完全“接管”整个异常处理任务。IDeveloperPageExceptionFilter接口定义了如下所示的HandleExceptionAsync方法进行异常处理。
public interface IDeveloperPageExceptionFilter
{
Task HandleExceptionAsync(ErrorContext errorContext, Func<ErrorContext, Task> next);
}
public class ErrorContext
{
public HttpContext HttpContext { get; }
public Exception Exception { get; }
public ErrorContext(HttpContext httpContext, Exception exception) ;
}
HandleExceptionAsync方法定义了errorContext和next两个参数,前者提供的ErrorContext对象是对HttpContext上下文的封装,并利用Exception属性提供待处理的异常;后者提供的Func<ErrorContext, Task>委托代表后续的异常处理任务。如果某个IDeveloperPageExceptionFilter对象没有将异常处理任务向后分发,开发者处理页面将不会呈现出来。如下的演示实例通过实现IDeveloperPageExceptionFilter接口定义了一个FakeExceptionFilter类型,并将其注册为依赖服务。
