2015-09-23 85 views
1

我的工作在這個項目中一個ASP.Net MVC 4 Project.All控制器被包裹成一個定製的控制器是這樣的:裹ASP.NET MVC控制器不支持異步操作方法

public abstract class BaseController : Controller{ 

    protected override void OnActionExecuted(ActionExecutedContext filterContext){ 

    } 

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

一切都好。但是,當我想用​​異步調節劑在異步操作方法,操作方法不正確地工作,鑑於

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); 
} 
+0

你是什麼意思'在異步方法中使用async修飾符? – Kamo

+0

像這樣'public async Task Index()' – codeWorm

+0

檢查我的答案。 – Kamo

回答

1

您應該AsyncController派生得到它的工作:

而是獲得從控制器控制的,從 AsyncController得到它。從AsyncController派生的控制器啓用 ASP.NET來處理異步請求,並且它們仍可以服務於 同步操作方法。

Controller默認情況下無法處理異步操作。

編輯:

由於上述方法是.NET 4,似乎它已被棄用,你可以找到另一種方法here

+0

不會在MVC 4.工作來看看這個[鏈接](http://stackoverflow.com/questions/13721571/should-i-use-asynccontroller-at-asp-net-mvc-4) – codeWorm

+0

[官方文檔](http://www.asp.net/mvc/overview/performance/using-asynchronous-methods-in-aspnet-mvc-4)表示不同:控制器類組合.NET 4.5使您能夠編寫異步操作返回Task 類型的對象的方法。 – ieaglle

+0

@codeWorm你是什麼意思的「不起作用」? – Kamo