C#异步MVC方法返回ContentResult System.Threading.Tasks.Task`1 [System.Web.Mvc.JsonResult]

时间:2013-11-11 12:55:18

标签: c# asp.net-mvc asp.net-mvc-4 asynchronous asynccontroller

我正在尝试将一些方法转换为异步,并在我正在修改的控制器中使用一个简单示例开始:

public class MyAPIController : AsyncController
{
    public async Task<JsonResult> List()
    {
        return Json(123456, JsonRequestBehavior.AllowGet);
    }

    ...
}

当我测试方法而不是Json结果时,我得到字符串值“System.Threading.Tasks.Task`1 [System.Web.Mvc.JsonResult]”,我已经通过Fiddler和浏览验证了。

该项目已手动升级到.NET45。搜索表明这可能是组件版本不正确的问题,但检查项目文件和Process视图表明在运行时引用和加载了正确的类型。

有没有人对此有任何调试技巧?

感谢。

1 个答案:

答案 0 :(得分:5)

在剥离90%的代码以使其正常工作并逐渐将其重新添加到失败之后,结果发现正在使用自定义的ControllerActionInvoker。修复是将自定义调用程序更改为从AsyncControllerActionInvoker继承并覆盖BeginInvokeAction而不是InvokeAction。 AsyncControllerActionInvoker可以处理异步和同步方法。