我遇到了aspnet核心mvc错误处理的问题。我已经在我的启动代码中正确设置了异常处理(当在控制器方法中执行代码时抛出异常时它会起作用),但是我得到的异常是我的处理程序没有处理它也没有被记录。
但在一种情况下,我将一个带有匿名对象的枚举返回给conrtoller方法。然后它被传递给Ok方法以作为JSON返回。枚举它时,由于NullReferenceException,无法创建其中一个对象。在我的控制器方法返回Ok之后枚举collection时抛出此异常。它没有被我尝试的任何激活处理机制注册:
为清晰起见,示例代码:
// 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之外,有没有人知道如何捕获此类异常?