我有一个操作如下:
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。
两种解决方法;
- 尝试升级到最新的ELMAH-它可能修复了async/await
- 删除对
ControllerBuilder.Current.SetControllerFactory(new ErrorHandlingControllerFactory())
的调用,只需使用GlobalFilters.Filters.Add(new HandleErrorWithElmahAttribute());
将HandleErrorWithElmahAttribute
添加到全局筛选器
干杯,Dean
这对我有效,
更改
public class authController : Controller
至
public class authController : AsyncController
我使包含导致错误的异步操作的控制器类继承自AsyncController类,而不是默认的控制器类
我在这里找到了答案