我正在编写一个动作过滤器(继承自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中是否仍然如此,如果是这样,在不阻塞线程的情况下调用此异步方法的最佳方法是什么?
答案 0 :(得分:9)
是的,它仍然是真的。 Web API 2支持异步操作过滤器,但MVC 5仍然不支持。不久前我对此感到非常沮丧。目前,您需要在操作过滤器中运行异步方法作为同步,或者重复您在每个需要它的操作中的操作过滤器中的异步代码,然后可以< / em>以async身份运行。
答案 1 :(得分:0)
有些人在这里'背面移植'
https://github.com/jdaigle/Hydrogen.Extensions.Mvc5
我没有尝试过,也不推荐它,但是如果你正在转向.NET Core,那么可能值得考虑。幸运的是,我设法从我的扩展程序中删除了所有异步代码 - 这次。