在MVC 5中调用操作中的异步方法过滤器

时间:2014-08-11 14:44:39

标签: c# asp.net-mvc asp.net-mvc-5 async-await

我正在编写一个动作过滤器(继承自ActionFilterAttribute),它使用HttpClient将数据POST到OnResultExecuted方法中的外部服务器。 HttpClient使用方法PostAsync返回等待的Task<HttpResponseMessage>

public override void OnResultExecuted(ResultExecutedContext filterContext)
{
    using (var client = new HttpClient())
    {
        var task = client.PostAsync(GetUri(), GetContent());
        var result = task.Result; // blocking
    }
}

Async action filter in MVC 4接受的答案表示在MVC 4中不可能。

在MVC 5中是否仍然如此,如果是这样,在不阻塞线程的情况下调用此异步方法的最佳方法是什么?

2 个答案:

答案 0 :(得分:9)

是的,它仍然是真的。 Web API 2支持异步操作过滤器,但MVC 5仍然不支持。不久前我对此感到非常沮丧。目前,您需要在操作过滤器中运行异步方法作为同步,或者重复您在每个需要它的操作中的操作过滤器中的异步代码,然后可以< / em>以async身份运行。

答案 1 :(得分:0)

有些人在这里'背面移植'

https://github.com/jdaigle/Hydrogen.Extensions.Mvc5

我没有尝试过,也不推荐它,但是如果你正在转向.NET Core,那么可能值得考虑。幸运的是,我设法从我的扩展程序中删除了所有异步代码 - 这次。