Asp.net mvc 4 在MVC4应用程序中使用带有async/await的HttpClient时出现空引用异常

Asp.net mvc 4 在MVC4应用程序中使用带有async/await的HttpClient时出现空引用异常,asp.net-mvc-4,httpclient,async-await,Asp.net Mvc 4,Httpclient,Async Await,我正在使用HttpClient调用RESTAPI。如果我从测试项目中调用HttpClient.GetAsync方法,它可以正常工作。但从MVC 4应用程序调用HttpClient.GetAsync()会引发未处理的对象引用未设置异常,堆栈跟踪如下: at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext) at System.Web.HttpApplication.OnThre

我正在使用HttpClient调用RESTAPI。如果我从测试项目中调用HttpClient.GetAsync方法,它可以正常工作。但从MVC 4应用程序调用HttpClient.GetAsync()会引发未处理的对象引用未设置异常,堆栈跟踪如下:

at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext) 
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext) 
at System.Web.LegacyAspNetSynchronizationContext.CallCallbackPossiblyUnderLock(SendOrPostCallback callback, Object state) 
at System.Web.LegacyAspNetSynchronizationContext.CallCallback(SendOrPostCallback callback, Object state) 
at System.Web.LegacyAspNetSynchronizationContext.Post(SendOrPostCallback callback, Object state) 
at System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.PostAction(Object state) 
at System.Threading.Tasks.AwaitTaskContinuation.RunCallback(ContextCallback callback, Object state, Task& currentTask) 
--- End of stack trace from previous location where exception was thrown --- 
at System.Threading.Tasks.AwaitTaskContinuation.<ThrowAsyncIfNecessary>b__1(Object s) 
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
at System.Threading.ThreadPoolWorkQueue.Dispatch() 
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
位于System.Web.ThreadContext.AssociateWithCurrentThread(布尔setImpersonationContext)
位于System.Web.HttpApplication.OnThreadEnterPrivate(布尔setImpersonationContext)
位于System.Web.LegacyAspNetSynchronizationContext.CallbackPossiblyUnderlock(SendOrPostCallback回调,对象状态)
位于System.Web.LegacySpNetSynchronizationContext.CallCallback(SendOrPostCallback回调,对象状态)
位于System.Web.LegacySpNetSynchronizationContext.Post(SendOrPostCallback,对象状态)
位于System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.PostAction(对象状态)
位于System.Threading.Tasks.AwaitTaskContinuation.RunCallback(ContextCallback回调、对象状态、任务和当前任务)
---来自引发异常的上一个位置的堆栈结束跟踪--
在System.Threading.Tasks.AwaitTaskContinuation.b__1(对象s)中
位于System.Threading.QueueUserWorkItemCallback.WaitCallback_上下文(对象状态)
位于System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext、ContextCallback回调、对象状态、布尔值preserveSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔保存SyncCTX)
位于System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()处
在System.Threading.ThreadPoolWorkQueue.Dispatch()中
在System.Threading.\u ThreadPoolWaitCallback.PerformWaitCallback()中

我正在运行.NETFramework4.5。你知道如何修复吗。

你的控制器动作也是异步的吗?谢谢你的评论。是的,我的控制器动作是异步的。我尝试使控制器操作同步,但是HttpClient.GetAsync()永远不会返回。您可以发布包含调用HttpClient.GetAsync()的整个结构的代码块吗?