我们在 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 改进了异步控制器的处理。这是一篇很棒的文章。但是 AsyncController 仍然存在,它的评论说:“提供与 ASP.NET MVC 3 的向后兼容性”。所以,我希望我能让我的旧代码继续工作。