C# 异步MVC方法返回ContentResult System.Threading.Tasks.Task`1[System.Web.MVC.JsonResult]
我正在尝试将一些方法转换为async,并从我正在修改的控制器中的一个简单示例开始:C# 异步MVC方法返回ContentResult System.Threading.Tasks.Task`1[System.Web.MVC.JsonResult],c#,asp.net-mvc,asp.net-mvc-4,asynchronous,asynccontroller,C#,Asp.net Mvc,Asp.net Mvc 4,Asynchronous,Asynccontroller,我正在尝试将一些方法转换为async,并从我正在修改的控制器中的一个简单示例开始: public class MyAPIController : AsyncController { public async Task<JsonResult> List() { return Json(123456, JsonRequestBehavior.AllowGet); } ... } 公共类MyApicController:AsyncCont
public class MyAPIController : AsyncController
{
public async Task<JsonResult> List()
{
return Json(123456, JsonRequestBehavior.AllowGet);
}
...
}
公共类MyApicController:AsyncController
{
公共异步任务列表()
{
返回Json(123456,JsonRequestBehavior.AllowGet);
}
...
}
当我测试该方法而不是Json结果时,我会得到字符串值“System.Threading.Tasks.Task`1[System.Web.Mvc.JsonResult]”,我已经通过Fiddler和浏览验证了该值
该项目已手动升级到.NET45。搜索表明这可能是程序集版本不正确的问题,但检查项目文件和流程视图表明在运行时引用并加载了正确的类型
有人对此有什么调试技巧吗
谢谢。在剥离90%的代码以使其正常工作,并逐渐将其重新添加到中,直到失败,结果证明正在使用自定义ControllerActionInvoker。修复方法是将自定义调用程序更改为从AsyncControllerActionInvoker继承,并重写BeginInvokeAction而不是InvokeAction。AsyncControllerActionInvoker可以处理异步和同步方法 显示调用
列表
方法的代码。还可以看到我正在做的是浏览url和\或使用Fiddler编写GET请求,我有一个测试项目,在这个项目中,这种方法可以正常工作。据我所知,MVC async仅在服务器上是异步的,因此不需要在客户端执行任何等待操作,因为它需要restful API。我通常在客户端调用ajax后返回Json。我不需要使用async,我返回的是ActionResult,而不是您所拥有的(任务)。看看这是否有帮助代码片段是我能得到的最简单的形式,并且仍然可以演示这个问题。List方法需要并行执行一些http web请求,要求控制器方法是异步的。我知道这应该行得通,因为我有一个更简单的测试项目,它返回正确的JSON结果。