解决Response.Redirect ThreadAbortException异常注意事项

关于ASP.NET 解决Response.Redirect ThreadAbortException异常注意事项
2012-07-12 18:44 by kaleyroy, 21 阅读, 0 评论, 收藏, 编辑
 
大家知道ASP.NET中Response.Redirect()是用来跳转页面的.关于这个不用过多解释. 当在try catch 块中使用的时候会引发ThreadAbortException异常,这个网上很多都说了解决方案,下面我引用MS官方建议的解决方案.

For Response.End, call the HttpContext.Current.ApplicationInstance.CompleteRequest method instead of Response.End to bypass the code execution to the Application_EndRequest event. For Response.Redirect, use an overload, Response.Redirect(String url, bool endResponse) that passes false for the endResponse parameter to suppress the internal call to Response.End.

For example:

      Response.Redirect ("nextpage.aspx", false);
                           

    If you use this workaround, the code that follows Response.Redirect is executed.
    For Server.Transfer, use the Server.Execute method instead.大家注意到红底字部分,人家说明了如果设置false的话:

Response.Redirect ("nextpage.aspx", false);

后面的代码还会继续执行.所以我们应该注意到这一点!

 

所以我们:

1.当跳转的时候希望完全截断后面的代码,建议Response.Redirect 放到try catch外面使用,或者使用别的更好的方式!

2.当使用Response.Redirect设置为false的时候,记得你后面的代码还是会执行的,别让它影响到你业务处理,谨慎使用

时间: 2024-09-27 12:39:34

解决Response.Redirect ThreadAbortException异常注意事项的相关文章

高效的使用 Response.Redirect解决一些不必要的问题_实用技巧

介绍: 我正在评估一个 ASP.NET Web 项目应用.它有一些可扩展性问题.意味着当网站访问量增加的时候.系统将会变得缓慢.当我查看应用日志.我找到了大量的 ThreadAbortException. 这个应用大量的使用了 Response.Redirect (是的 endResponse= true),这个就是可扩展性问题的根源.通过endResponse = false 在Response.Redirect将会解决这个问题. 但这样做会导致应用程序出现一些奇怪的问题.因为应用程序将假设在

Response.Redirect引起的“无法在发送HTTP标头之后进行重定向”

博客后台切换至i.cnblogs.com之后,在日志中发现大量的"无法在发送HTTP标头之后进行重定向"(Cannot redirect after HTTP headers have been sent)的错误信息. 检查代码发现问题是由下面的代码触发的: IHttpHandler IHttpHandlerFactory.GetHandler(HttpContext context, string requestType, string url, string pathTransla

asp.net在使用Response.Redirect try{}catch{}块失效

try { - Response.Redirect("/mymaimai.aspx"); - } catch (Exception e) { // 异常处理 } 使用以上语句,不管是否有异常,都会执行catch中的,一直显示""失败"",都会抛出 System.Threading.ThreadAbortException,原因如下: Response.End 方法停止页的执行,并将该执行变换到应用程序的事件管线中的 Application_End

Response.Redirect 正在中止线程解决方案_C#教程

这两天在开发调试过程中,老是会出现在一个 "正在中止线程"(ThreadAbortException)的例外信息. 例外是由 Response.Redirect 方法产生的,虽然知道是线程的问题, 但是不知为何 Redirect会出现这样的错误,以前是没有碰到过,转移到 Asp.net 2.0 开发就遇上了. 在狂Google了一下后,才发现MS早就发现了这个问题,但提供了解决方法.以下是主要信息的摘要: 症状 如果使用 Response.End.Response.Redirect 或

Response.Redirect在新窗口打开的另一种方法

这里介绍Ihttpmodule处理请求管道的方法.Response.Redirect的原理是服务器设置返回http状态码为302,然后客户端执行跳转,用reflector可以看到.net的代码段. 以下是HttpResponse类的Redirect方法中的跳转代码 this.StatusCode = 0x12e; this.RedirectLocation = url; 所以,我们可以扩展Ihttpmodule来拦截http状态码,强制设为200,同时插入js代码段来实现新窗口打开.以下是Iht

asp.net 页面转向 Response.Redirect, Server.Transfer, Server.Execute的区别_实用技巧

Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面.你可以使用下面的代码将用户引导到另一个页面: Response.Redirect("WebForm2.aspx") 或者 Response.Redirect("http://www.cnnas.com/") Server.Transfer 也是通过一条语句将用户引导到另一页面,比如:Server.Transfer("WebForm2.aspx").不过,这

asp.net 页面转向 Response.Redirect, Server.Transfer, Server.Execute的区别

Response.Redirect 简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面.你可以使用下面的代码将用户引导到另一个页面: Response.Redirect("WebForm2.aspx") 或者 Response.Redirect("http://www.cnnas.com/") Server.Transfer 也是通过一条语句将用户引导到另一页面,比如:Server.Transfer("WebForm2.aspx").不过,这

service-如何解决 android 中的异常问题?

问题描述 如何解决 android 中的异常问题? 在Android程序中,我创建了HttpDelete方法来调用REST web服务. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView txt = (TextView) findViewById(R.id.textView1); txt.setT

Response.Redirect不跳转页面

问题描述 问题:后台事件过程中,我在处理完数据后使用Response.Redirect("info.aspx"),页面没有跳转是当前页空白页.补充:1.运行环境:WindowsSverver2003企业版.IIS6.0..Framwork1.12.开发环境:Windowsxp.IIS5.0.VS20033.开发环境没有发现问题,运行环境中经常出现问题处理:1.出现问题后,只要重新安装.Framwork1.1环境就好了,但是我不能天天盯着服务器吧.2.我咨询过朋友,让我尝试IIS里的启用