如何让Response.Redirect使用ASP.NET MVC和异步?

时间:2014-09-01 12:17:26

标签: c# asp.net asp.net-mvc asp.net-mvc-4 redirect

我们开始将我们的旗舰应用程序从ASP.NET Webforms迁移到ASP.NET MVC。由于它几乎是一个重写,我们正试图尽可能多地获得好的新功能。其中一个是新奇的async。我们正试图制作所有控制器和动作async(当然这是有意义的),希望能够获得更好的性能。

然而,我遇到的问题是Response.Redirect甚至Server.Transfer方法只是挂起请求。看起来某处死锁。

这很遗憾,因为我们已经习惯了Response.Redirect方法,它会中止您所做的一切,只是重定向整个请求。非常方便,至少在webforms中(使POST-REDIRECT-GET模式易于使用)。

此外,也许更重要的是,Response.RedirectServer.Transfer用于我们的Application_Error处理程序,它将请求转移到错误页面。我甚至都不知道可以在那里使用的任何替代品。

那么......我们怎么能让Response.Redirect恢复生机?

1 个答案:

答案 0 :(得分:0)

您可能希望将操作返回类型更改为HttpResponseMessage(如果尚未更改),以便您可以更好地控制返回到浏览器的内容。

public Task<HttpResponseMessage> Action()
{
    return Task.Factory.StartNew(() =>
    {
        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Redirect);
        response.Headers.Location = new Uri("http://stackoverflow.com");
        return response;
    });
}

以上代码将异步处理api操作,返回重定向代码和标头以重定向浏览器。