Async Await MVC操作返回Task,而不是ActionResult



我有一个操作如下:

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状态200代码,而是以下内容:

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

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

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

我真的不明白问题出在哪里——有人能帮忙吗?

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

两种解决方法;

  1. 尝试升级到最新的ELMAH-它可能修复了async/await
  2. 删除对ControllerBuilder.Current.SetControllerFactory(new ErrorHandlingControllerFactory())的调用,只需使用GlobalFilters.Filters.Add(new HandleErrorWithElmahAttribute());HandleErrorWithElmahAttribute添加到全局筛选器

干杯,Dean

这对我有效,

更改

public class authController : Controller

public class authController : AsyncController

我使包含导致错误的异步操作的控制器类继承自AsyncController类,而不是默认的控制器类

我在这里找到了答案

相关内容