2013-08-05 50 views
4

我有一个动作如下:异步等待MVC行动返回任务的代替的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] 

为了测试我使用以下网址打电话只是从网络浏览器的操作:

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

我真的不明白问题所在 - 任何人都可以帮忙吗?

+0

我觉得这只能在异步操作的控制器类MVC4 - 你肯定使用版本4? –

+0

院长,是的,我肯定是运行MVC 4 - 有一个类似签名的另一个控制器上的另一个行动 - 只有真正的区别是,它接受FormCollection - 真的不知道它... – markpirvine

+0

它没有异步工作和任务? – usr

回答

3

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

两种解决方法;

  1. 尝试升级到最新的ELMAH - 它可能修复了异步/等待。
  2. 删除调用ControllerBuilder.Current.SetControllerFactory(new ErrorHandlingControllerFactory())和简单地使用GlobalFilters.Filters.Add(new HandleErrorWithElmahAttribute());

干杯, 院长

+0

Dean,感谢您的反馈意见 - 我最终选择了2 - 更少的代码,最终结果是相同的(至少在我的情况下)。 – markpirvine

0

这为我工作添加HandleErrorWithElmahAttribute到全局过滤器,

改变

public class authController : Controller

public class authController : AsyncController

我做的,包含了从AsyncController类的错误继承,而不是默认的Controller类

我发现answer here