我们开始将我们的旗舰应用程序从ASP.NET Webforms迁移到ASP.NET MVC。由于它几乎是一个重写,我们正试图尽可能多地获得好的新功能。其中一个是新奇的async
。我们正试图制作所有控制器和动作async
(当然这是有意义的),希望能够获得更好的性能。
然而,我遇到的问题是Response.Redirect
甚至Server.Transfer
方法只是挂起请求。看起来某处死锁。
这很遗憾,因为我们已经习惯了Response.Redirect
方法,它会中止您所做的一切,只是重定向整个请求。非常方便,至少在webforms中(使POST-REDIRECT-GET模式易于使用)。
此外,也许更重要的是,Response.Redirect
和Server.Transfer
用于我们的Application_Error
处理程序,它将请求转移到错误页面。我甚至都不知道可以在那里使用的任何替代品。
那么......我们怎么能让Response.Redirect
恢复生机?
答案 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操作,返回重定向代码和标头以重定向浏览器。