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

时间:2015-05-20 17:14:00

标签: c# asp.net

我是asp.net开发的新手。我目前正在使用asp.net web应用程序。 虽然解决问题遇到异常“线程正在中止”。我通过几篇文章来深入了解异常。

我读了这篇很棒的文章on codeproject 由Shivprasad koirala解释我使用Server.TransferResponse.Redirect

然后我去了this post by Thomas Marquardt 这使我得出结论Respose.Redirect(url,false)但更好地使用

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

但Imrambaloch再次提到this article 使用Response.Redirect(url, false)存在安全问题,而是使用

Response.Redirect(url, false);
var context = HttpContext.Current;
if (context != null)
{
    context.ApplicationInstance.CompleteRequest();
}

现在最后我有点困惑,因为这是推荐的重定向方式。

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

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

3 个答案:

答案 0 :(得分:4)

添加@ William的回答:

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

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

答案 1 :(得分:2)

正如您在上面引用的那些帖子中所读到的那样,Response.Redirect使用Server.Transfer进行转移,这是在服务器上完成的。

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

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

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

答案 2 :(得分:1)

简短的回答是,做第一篇文章要做的事情。

虽然技术上正确,但第二篇文章忽略了最简单的解决方案:避免在Page_Load中执行Response.Redirect。如果来拉动Page_Load中的Response.Redirect,只需对该一个或两个实例执行ThreadAbortException命中,而不是在HttpModule中编写一堆愚蠢的代码。

一般来说,您可能没有太多理由在Page_Load中提取Response.Redirect。

例如,如果您正在使用ASP.NET表单身份验证,那么它将负责#34;您不属于此处,请转到此登录页面伙伴"给你的东西。

作为旁注,如果您可以选择这样做,请将注意力集中在ASP.NET MVC技术上。随着你的职业发展,它将为你提供更好的工作和更少的挫折。