C# 在Try/Catch块中使用Response.Redirect(url)

C# 在Try/Catch块中使用Response.Redirect(url),c#,.net,try-catch,response.redirect,C#,.net,Try Catch,Response.redirect,如果我对try/catch块中的错误的响应是将用户重定向到错误页面,那么try/catch块的行为就像没有错误时有错误一样。如果我将其更改为执行其他操作,代码工作正常 例如: try { //do this SQL server stuff } catch { Response.Redirect(error.htm) //Change this to lblErr.Text = "SQL ERROR"; and the code in try works fine. } 从

如果我对try/catch块中的错误的响应是将用户重定向到错误页面,那么try/catch块的行为就像没有错误时有错误一样。如果我将其更改为执行其他操作,代码工作正常

例如:

try
{
    //do this SQL server stuff
}
catch
{
   Response.Redirect(error.htm)
   //Change this to lblErr.Text = "SQL ERROR"; and the code in try works fine.
}
从另一篇文章中,我了解到Response.Redirect()方法有一个布尔重载。我尝试了true和false,try/catch块的行为仍然像有错误一样


怎么回事?

你忘了引号和分号:

Response.Redirect("error.htm");
您应该使用该属性

[HandleError]
public ActionResult Foo(){
    //...

    throw new Exception(); // or code that throws execptions

    //...
}

这样,异常会自动导致重定向到错误页面。

当您响应时。重定向会引发ThreadAbortException。因此,要获得您描述的结果,您需要对代码进行如下修改:

try  
{
   // Do some cool stuff that might break
}
catch(ThreadAbortException)
{

}
catch(Exception e)
{
  // Catch other exceptions
  Response.Redirect("~/myErrorPage.aspx");
}
根据设计,这将通过抛出异常来终止调用线程

Response.Redirect("url", false);
将防止抛出异常,但是将允许代码继续执行

使用


将重定向用户并停止执行,而不会引发异常。

顺便说一句,在上有一篇关于此主题的KB文章。您的代码似乎有点不对劲;这基本上就是OP的功能。我不知道你要用它干什么。哇。。嗯。。尝试不到是咆哮的。。。英雄联盟只是开玩笑。他的Try/Catch块将捕获所有接受,并尝试以相同的方式处理它们。(编辑…)此代码段基本上会告诉应用程序忽略ThreadAbortException,当他调用Response.Write时,不可避免地会抛出ThreadAbortException。然后,它以他想要的方式处理任何其他异常类型。所讨论的异常实际上是在调用
Response.Redirect()
时抛出的。默认情况下,它抛出一个
ThreadAbortException
。所以它不会被这个抓住;catch处理程序中抛出的异常将进入堆栈。看来这是解决我问题的唯一方法。这个问题使OP看起来好像没有使用MVC。这也不起作用。仍会表现为存在异常。
Response.Redirect("url", false);
Response.Redirect("url", false);
HttpContext.Current.ApplicationInstance.CompleteRequest();