我们在ASP.NET MVC3中有现有的工作代码。我们正在尝试升级到MVC4,但是一个动作方法调用正在抛出异常:
异步操作方法'Get'不能同步执行
我知道其他人遇到过类似的问题,因为我看过像MVC Async error - The asynchronous action method 'Complete' cannot be executed synchronously这样的帖子。
当我们的动作调用程序代码调用异步动作时,会发生错误。我将尝试简化代码,它看起来像:
String actionName = "Get";
AsyncControllerActionInvoker asyncInvoker = new AsyncControllerActionInvoker();
asyncInvoker.InvokeAction(controllerContext, actionName);
并且异步方法位于从AsyncController派生的控制器中,定义为:
[Url("methodname/{type?}"), HttpGet]
public void GetAsync()
[NonAction]
public Output GetCompleted(Output output, Exception ex)
因此,当AsyncControllerActionInvoker.InvokeAction尝试在从AsyncController派生的控制器上调用异步方法时,它会失败。我应该调用AsyncControllerActionInvoker.BeginInvokeAction()吗?为什么这在MVC 3中有效并在MVC 4中失败?
我知道MVC 4改进了异步控制器的处理。 Here是一篇很棒的文章。但AsyncController仍然存在,其评论说:“提供向后兼容ASP.NET MVC 3”。所以,我希望我可以让我的旧代码继续工作。