引发异常后,何时才会调用.net核心异常过滤器?

时间:2019-01-28 19:51:51

标签: c# asp.net-core .net-core

在我的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;
    }
}

例如,如果我的客户端类抛出异常,即使调用客户端类的服务类已经准备好尝试捕获此类异常,过滤器也会立即被调用吗?

1 个答案:

答案 0 :(得分:1)

不。根据{{​​3}},异常过滤器只会由未处理的异常触发;如果客户端异常由服务处理且未重新抛出,则异常过滤器将不会触发。

  

异常过滤器:

     
      
  • 没有前后事件。
  •   
  • 实现OnException或OnExceptionAsync。
  •   
  • 处理在控制器创建,模型绑定,操作过滤器或操作方法中发生的未处理异常。
  •   
  • 不要捕获资源过滤器,结果过滤器或MVC结果执行中发生的异常。
  •   
相关问题