如何捕获IEnumerable在我的代码之外引发的异常

时间:2018-02-12 11:32:32

标签: c# exception-handling asp.net-core-mvc asp.net-core-1.1

我遇到了aspnet核心mvc错误处理的问题。我已经在我的启动代码中正确设置了异常处理(当在控制器方法中执行代码时抛出异常时它会起作用),但是我得到的异常是我的处理程序没有处理它也没有被记录。

但在一种情况下,我将一个带有匿名对象的枚举返回给conrtoller方法。然后它被传递给Ok方法以作为JSON返回。枚举它时,由于NullReferenceException,无法创建其中一个对象。在我的控制器方法返回Ok之后枚举collection时抛出此异常。它没有被我尝试的任何激活处理机制注册:

  • UseExceptionHandler,
  • builder.AddMvcOptions(o => {o.Filters.Add(new GlobalExceptionFilter(logger));});

为清晰起见,示例代码:

// in some repo class
public bool IsEnabled(int i)
{
    if ( i == 50)
    {// this is to repro only, in reality it is caused by bad data, and
     // we want the exception to be thrown if such data came - we just   
     // want to catch and log it
        throw new NullReferenceExcpetion(); 
    }
    return true;
}

// in some repo class
IEnumerable<object> GetObjects()
{
    for (int i = 0; i < 100; ++i)
    {
        yield return new { Id = i, Enabled = IsEnabled(i) };
    } 
}

// in some controller that has [Produces("application/json")]
[HttpGet]
[Route("objects")]
public async Task<IActionResult> GetObjects()
{
    var objects = await someRepo.GetObjects();

    return this.Ok(objects);
}

除了将返回类型更改为IList之外,有没有人知道如何捕获此类异常?

0 个答案:

没有答案