ExceptionFilter 扩展
同步异常的执行特点:
如果实现ActionFilterAttribute抽象父类,在执行的时候,只会执行异步版本的方法(在源码中他是直接判断了,如果有异步版本,同步版本就不执行了)。
CustomExceptionFilterAttribute 同时实现 IExceptionFilter 和 IAsyncExceptionFilter,会使用 OnExceptionAsync 异步方法。
public class CustomExceptionFilterAttribute : Attribute, IExceptionFilter,IAsyncExceptionFilter
{
/// <summary>
/// 当有异常发生的时候,就会触发到这里
/// </summary>
/// <param name="context"></param>
/// <exception cref="NotImplementedException"></exception>
public void OnException(ExceptionContext context)
{
throw new NotImplementedException();
}
/// <summary>
/// 当有异常发生的时候,就会触发到这里
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public Task OnExceptionAsync(ExceptionContext context)
{
throw new NotImplementedException();
}
}
#region ExceptionFilter
[CustomExceptionFilter]
public IActionResult Index7()
{
throw new Exception("测试,抛出一个异常");
}
#endregion
ExceptionFilter封装扩展
异常的标准处理方式
public class CustomExceptionFilterAttribute : Attribute, IExceptionFilter,IAsyncExceptionFilter
{
private readonly IModelMetadataProvider _IModelMetadataProvider;
public CustomExceptionFilterAttribute(IModelMetadataProvider modelMetadataProvider)
{
this._IModelMetadataProvider = modelMetadataProvider;
}
/// <summary>
/// 当有异常发生的时候,就会触发到这里
/// </summary>
/// <param name="context"><