如何在Web API 2异步操作中获取正确的异常堆栈跟踪?

Kna*_*ģis 15 c# asp.net asp.net-web-api

我有一个简单的API控制器方法

public async Task<Models.Timesheet> GetByDate(DateTime date, string user = null)
{
    throw new InvalidOperationException();
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,我在自定义操作过滤器中或仅通过设置获得的异常堆栈跟踪IncludeErrorDetailPolicy.Always是这样的

System.InvalidOperationException: Operation is not valid due to the current state of the object.
   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.ApiController.<InvokeActionWithExceptionFilters>d__1.MoveNext()
Run Code Online (Sandbox Code Playgroud)

它曾经比Web API v1好多了.在升级到v2之后,堆栈跟踪几乎无法使用 - 预计使用async/await时,堆栈跟踪将不会像过去那样,但在这种情况下,整个堆栈跟踪不包括任何提示,即使是类失败.是否可以在Web API中配置以缓解此问题?

Alo*_*atz 7

这已在WebApi 2.1(程序集版本5.1.1)中修复

请按照以下说明升级到最新版本:https://www.nuget.org/packages/Microsoft.AspNet.WebApi

  • 这确实是最好的答案,它是一个框架错误,解决它的最佳方法是升级. (5认同)