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

dav*_*v_i 11 c# asp.net-mvc async-await asp.net-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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*att 10

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

  • 啊.这确实不理想.这真是一种耻辱,这是一个缺乏这样的特征. (4认同)