繁体   English   中英

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

[英]Calling Async Methods in Action Filters in MVC 5

我正在编写一个Action Filter(继承自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
    }
}

MVC 4中Async动作过滤器的接受答案表明它在MVC 4中是不可能的。

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

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

有些家伙在这里“背上了”它

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM