Async Await MVC Action返回Task而不是ActionResult

时间:2013-08-05 10:25:38

标签: asp.net-mvc-4 async-await elmah

我的行动如下:

public async Task<ActionResult> Pair(string id)
    {
        try
        {
            DocuSignAPIManager docuSignAPIManager = new DocuSignAPIManager();

            DocuSignEsignatureAuthContainer authContainer = await docuSignAPIManager.Pair(User.Identity.Name, id).ConfigureAwait(false);

            DocuSignManager.Instance.Pair(User.Identity.Name, authContainer);
        }
        catch(Exception e)
        {
            ErrorManager.Instance.LogError(e);
        }

        return new HttpStatusCodeResult(200);
    }

当调用该操作时,执行所有逻辑,但是我收到以下内容而不是HTTP Status 200代码:

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

为了进行测试,我只是使用以下网址从网络浏览器调用操作:

http://localhost:20551/CharteredSurveyor/Pair/password

我真的不明白问题是什么 - 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

ELMAH的ErrorHandlingControllerFactory返回一个自定义动作调用程序,用于确保将HandleErrorWithElmahAttribute应用于控制器。它从不提供异步动作调用程序,因此它不理解async / await。

两个解决方法;

  1. 尝试升级到最新的ELMAH - 它可能有针对async / await的修复。
  2. 移除对ControllerBuilder.Current.SetControllerFactory(new ErrorHandlingControllerFactory())的来电,只需使用HandleErrorWithElmahAttribute
  3. GlobalFilters.Filters.Add(new HandleErrorWithElmahAttribute());添加到全局过滤器

    干杯, 迪安

答案 1 :(得分:0)

这对我有用,

改变

public class authController : Controller

public class authController : AsyncController

我创建了包含异步操作的控制器类,该操作使该错误继承自AsyncController类而不是默认的Controller类

我发现answer here