包装的ASP.NET MVC控制器不支持异步操作方法

时间:2015-09-23 06:48:22

标签: c# asp.net-mvc asynchronous

我正在开发ASP.Net MVC 4项目。此项目中的所有控制器都包含在这样的自定义控制器中:

public abstract class BaseController : Controller{

    protected override void OnActionExecuted(ActionExecutedContext filterContext){

    }

    protected override IActionInvoker CreateActionInvoker(){
    return new WebControllerActionInvoker();
    }
}

一切都好。但是当我想在异步操作方法中使用async修饰符时,action方法无法正常工作并返回此消息 在视野中

  

System.Threading.Tasks.Task`1 [System.Web.Mvc.ActionResult]

现在我该怎么做才能解决这个问题?

编辑:操作方法示例

public async Task<ActionResult> Details(string id) { 
var user = await userService.FindByIdAsync(id); 
return View(user);
}

1 个答案:

答案 0 :(得分:1)

你应该从AsyncController派生出来让它发挥作用:

  

不是从Controller派生控制器,而是从中派生出来   AsyncController。从AsyncController派生的控制器启用   ASP.NET处理异步请求,它们仍然可以服务   同步行动方法。

默认情况下,

Controller无法处理异步操作。

编辑:

由于上述方法适用于.NET 4并且似乎已弃用,因此您可以找到另一种方法here