Asp.net web api 在ASP.NET Web API 2 ExceptionHandlerAttribute中,抛出未找到异常的方法
我正在使用Asp.net web api 在ASP.NET Web API 2 ExceptionHandlerAttribute中,抛出未找到异常的方法,asp.net-web-api,asp.net-web-api2,Asp.net Web Api,Asp.net Web Api2,我正在使用ExceptionHandlerAttribute处理Web Api 2中的异常 public class ExceptionHandlerAttribute : ExceptionFilterAttribute { public ExceptionHandlerAttribute() { } public override void OnException(HttpActionExecutedContext actionExecut
ExceptionHandlerAttribute
处理Web Api 2中的异常
public class ExceptionHandlerAttribute : ExceptionFilterAttribute
{
public ExceptionHandlerAttribute()
{
}
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
HandleException(actionExecutedContext);
}
private void HandleException(HttpActionExecutedContext actionExecutedContext)
{
// Log exception here
}
}
在其中一个控制器中,我下面有一个异步方法抛出异常(我知道为什么这个方法抛出异常,但这不是问题)
public异步任务GetOrders(FilterDTO过滤器)
{
返回等待_dbcontext.Orders
.Include(x=>x.User)
.Where(x=>x.OrderDate>filters.StartOrderDate&&x.IsApproved)
.Select(x=>neworderdto()
{
OrderID=x.OrderID,
金额=x.金额,
OrderDate=x.OrderDate,
LastModifiedUser=x.User.ToDto()
})
.ToListAsync();
}
当上述方法中发生异常时,Web Api框架会按预期调用已注册的ExceptionHandlerAttribute
的OneException()
方法。但是在过滤器中,我得到方法未找到错误
HandleException
方法是同一类中的私有方法,我不知道为什么它找不到该方法
更新1(堆栈跟踪)
位于XXXXXXXXX.Api.Filters.ExceptionHandlerAttribute.HandleException(HttpActionExecutedContext
actionExecutedContext)\r\n位于XXXXXXXXX.Api.Filters.ExceptionHandlerAttribute.OneException(HttpActionExecutedContext actionExecutedContext)中的 C:\repos\XXXXXXXXXX\Src\Api\Filters\ExceptionHandlerAttribute.cs:line 30\r\n在 System.Web.Http.Filters.ExceptionFilterAttribute.OneExceptionAsync(HttpActionExecuteContext actionExecutedContext,CancellationToken CancellationToken)
根据图像中的异常消息,它找不到
HttpActionExecutionContext.Request
。将确切的消息/桩跟踪显示为文本,并包括从代码段中排除的HandleException
方法的主体。同意。但为什么它在调用HandleException方法时抛出异常呢?如果您注意到,我在第一行的HandleException
中有一个调试器。那个调试器永远不会成功。它甚至不执行HandleException
方法,在调用HandleException
内部OnException
时会抛出错误,直到我看到上面的堆栈跟踪更新1和堆栈跟踪更新问题:你确定,运行应用程序时使用的.net framework是否正确安装并可用?应用程序正在使用正确的IIS运行时设置运行?
public async Task<IEnumerable<OrderDTO>> GetOrders(FilterDTO filters)
{
return await _dbcontext.Orders
.Include(x => x.User)
.Where(x => x.OrderDate > filters.StartOrderDate && x.IsApproved)
.Select(x => new OrderDTO()
{
OrderID = x.OrderID,
Amount = x.Amount,
OrderDate = x.OrderDate,
LastModifiedUser = x.User.ToDto()
})
.ToListAsync();
}