异步等待 MVC 操作返回任务而不是 ActionResult

mar*_*ine 5 elmah async-await asp.net-mvc-4

我有如下操作:

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);
    }
Run Code Online (Sandbox Code Playgroud)

当调用该操作时,所有逻辑都被执行,但不是 HTTP 状态 200 代码,我收到以下信息:

System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult]
Run Code Online (Sandbox Code Playgroud)

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

http://localhost:20551/CharteredSurveyor/Pair/password
Run Code Online (Sandbox Code Playgroud)

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

Dea*_*ard 3

ELMAHErrorHandlingControllerFactory返回一个自定义操作调用程序,它使用它来确保其HandleErrorWithElmahAttribute应用于控制器。它从不提供异步操作调用程序,因此它不理解异步/等待。

两种解决方法;

  1. 尝试升级到最新的 ELMAH - 它可能修复了异步/等待问题。
  2. 删除对全局过滤器的调用ControllerBuilder.Current.SetControllerFactory(new ErrorHandlingControllerFactory())并简单地添加HandleErrorWithElmahAttribute到全局过滤器中,使用GlobalFilters.Filters.Add(new HandleErrorWithElmahAttribute());

干杯,迪恩