在我的api中,我有一个包含操作的标准控制器,该操作调用服务,然后该服务调用客户端以与其他第三方api联系。
我正在寻求实现类似于以下内容的异常过滤器:
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
private readonly IHostingEnvironment _hostingEnvironment;
private readonly IModelMetadataProvider _modelMetadataProvider;
public CustomExceptionFilterAttribute(
IHostingEnvironment hostingEnvironment,
IModelMetadataProvider modelMetadataProvider)
{
_hostingEnvironment = hostingEnvironment;
_modelMetadataProvider = modelMetadataProvider;
}
public override void OnException(ExceptionContext context)
{
if (!_hostingEnvironment.IsDevelopment())
{
// do nothing
return;
}
var result = new ViewResult {ViewName = "CustomError"};
result.ViewData = new ViewDataDictionary(_modelMetadataProvider,context.ModelState);
result.ViewData.Add("Exception", context.Exception);
// TODO: Pass additional detailed data via ViewData
context.Result = result;
}
}
例如,如果我的客户端类抛出异常,即使调用客户端类的服务类已经准备好尝试捕获此类异常,过滤器也会立即被调用吗?
答案 0 :(得分:1)
不。根据{{3}},异常过滤器只会由未处理的异常触发;如果客户端异常由服务处理且未重新抛出,则异常过滤器将不会触发。
异常过滤器:
- 没有前后事件。
- 实现OnException或OnExceptionAsync。
- 处理在控制器创建,模型绑定,操作过滤器或操作方法中发生的未处理异常。
- 不要捕获资源过滤器,结果过滤器或MVC结果执行中发生的异常。