C# 在asp.net中重定向用户的最佳方法是什么?

C# 在asp.net中重定向用户的最佳方法是什么?,c#,asp.net,C#,Asp.net,我是asp.net开发新手。我目前从事asp.net web应用程序的开发。 解决问题时遇到异常“线程正在中止”。我阅读了几篇文章以深入了解异常 我读了这篇很棒的文章 Shivprasad koirala向我解释了Server.Transfer和Response.Redirect的用法 然后我去了 这让我得出结论:Respose.Redirect(url,false),但使用起来更好 Server.ClearError(); Response.Redirect(url, false); Cont

我是asp.net开发新手。我目前从事asp.net web应用程序的开发。 解决问题时遇到异常“线程正在中止”。我阅读了几篇文章以深入了解异常

我读了这篇很棒的文章 Shivprasad koirala向我解释了
Server.Transfer
Response.Redirect
的用法

然后我去了 这让我得出结论:Respose.Redirect(url,false),但使用起来更好

Server.ClearError();
Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();
但同样由伊姆兰巴洛克说 使用
Response.Redirect(url,false)
时存在安全问题,而使用

Response.Redirect(url, false);
var context = HttpContext.Current;
if (context != null)
{
    context.ApplicationInstance.CompleteRequest();
}
最后,我有点困惑,到底哪种方法是推荐的重定向方法

我的问题: 消除安全问题和性能问题的重定向用户的最佳方法是什么


Server.Transfer
Response.Redirect
相比真的那么糟糕吗?

就像你在引用的那些帖子上读到的那样,带有
Response.Redirect
当使用
Server.Transfer
时,传输是通过浏览器完成的。Transfer是在服务器上完成的

要导航到同一服务器上的页面时,请使用
Server.Transfer
;要在不同服务器/域上的页面之间导航时,请使用
Response.Redirect

Server.Transfer
更快,因为减少了一次往返-节省了服务器资源


底线–这取决于您的要求。

在@William的回答中添加:

Transfer方法不会更改浏览器中的Url,而是将用户重定向到新页面。它在服务器上保留上一页的信息,在响应时完全重定向,而不保留上一页的状态


对于性能,Response.Redirect有另一个参数endResponse(bool)。在第二个参数中传递true可能会使应用程序运行缓慢,因为不建议使用EndResponse(),即使是手动完成响应。而是按照您列出的博客中的建议使用Context.ApplicationInstance.CompleteRequest()。

简短的回答是,按照第一篇文章的要求去做

尽管在技术上是正确的,但第二篇文章忽略了最简单的解决方案:避免在页面加载中执行Response.Redirect。如果您要拉取响应。请在页面加载中重定向,只需点击该一两个实例的ThreadAbortException,而不是在HttpModule中编写一堆愚蠢的代码

一般来说,您可能没有太多好的理由来获取响应。无论如何,在页面加载中重定向

例如,如果您使用ASP.NET表单身份验证,它将为您处理“您不属于这里,请转到此登录页好友”之类的内容

另外,如果您可以选择这样做,请将注意力集中在ASP.NET MVC技术上。随着你事业的发展,它会让你找到更好的工作,减少挫折感