ASP.NET中重定向用户的最佳方法是什么?

7

我是asp.net开发的新手,目前正在开发asp.net Web应用程序。在解决问题时遇到了“线程被终止”的异常。我查阅了多篇文章以深入理解该异常。

我读了Shivprasad koirala撰写的这篇精彩文章(代码工程),其中解释了Server.TransferResponse.Redirect的使用。

然后我去看了Thomas Marquardt发布的这篇文章,得出结论,最好使用Respose.Redirect(url,false)

Server.ClearError();
Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();

但是,Imrambaloch的这篇文章指出,使用Response.Redirect(url, false)存在安全问题,建议使用
Response.Redirect(url, false);
var context = HttpContext.Current;
if (context != null)
{
    context.ApplicationInstance.CompleteRequest();
}

最终我有些困惑,不知道哪种方式是推荐的重定向方式。

我的问题: 在消除安全问题和性能问题方面,什么是最好的重定向用户的方法?

Server.TransferResponse.Redirect相比,真的那么糟糕吗?

3个回答

4

补充@William的答案:

Server.Transfer方法不会更改浏览器中的URL,但会将用户重定向到新页面。它在服务器上保留了上一页的信息,而Response.Redirect则完全重定向而不保留上一页的状态。

就性能而言,Response.Redirect还有另一个参数endResponse(bool)。在第二个参数中传递true可能会使您的应用程序变慢,因为即使您手动完成响应,也不建议使用EndResponse()。相反,建议使用您列出的博客中建议的Context.ApplicationInstance.CompleteRequest()。


2
如您可能已经在引用的那些帖子中读到的一样,使用 Response.Redirect 时转移是由浏览器完成的,而使用 Server.Transfer 时转移是在服务器上完成的。
当您想要导航到位于同一服务器上的页面时,请使用 Server.Transfer;当您想要在不同的服务器/域之间导航时,请使用 Response.RedirectServer.Transfer 更快,因为少了一个往返 - 节约了服务器资源。
底线是 - 这取决于您的需求。

1
简而言之,按照第一篇文章所说的去做即可。虽然第二篇文章在技术上是正确的,但它忽略了最简单的解决方案:避免在Page_Load中进行Response.Redirect。如果你必须在Page_Load中进行Response.Redirect,那么只需在那一两个实例中承受ThreadAbortException的打击,而不是编写大量愚蠢的代码在HttpModule中。一般来说,你可能没有太多理由在Page_Load中使用Response.Redirect。例如,如果你正在使用ASP.NET Forms身份验证,它会为你处理"你不属于这里,去这个登录页面吧"的东西。另外,如果你有选择的话,把注意力集中在ASP.NET MVC技术上。随着你职业生涯的发展,它将为你带来更好的工作和更少的挫败感。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接