我遇到了一些奇怪response.redirect()
的错误,并且项目根本没有构建..当我删除了围绕代码块的try-catchResponse.Redirect()
块时,它正常工作..
只是想知道这是一个已知问题还是什么......
我遇到了一些奇怪response.redirect()
的错误,并且项目根本没有构建..当我删除了围绕代码块的try-catchResponse.Redirect()
块时,它正常工作..
只是想知道这是一个已知问题还是什么......
如果我没记错的话,Response.Redirect()
抛出异常以中止当前请求(ThreadAbortedException
或类似的东西)。因此,您可能会遇到该异常。
编辑:
此知识库文章描述了此行为(也适用于Request.End()
和Server.Transfer()
方法)。
因为Response.Redirect()
存在过载:
Response.Redirect(String url, bool endResponse)
如果您通过endResponse=false
,则不会引发异常(但运行时将继续处理当前请求)。
如果endResponse=true
(或者如果使用了其他重载),则抛出异常并且当前请求将立即终止。
正如 Martin 指出的那样,Response.Redirect 会引发 ThreadAbortException。解决方法是重新抛出异常:
try
{
Response.Redirect(...);
}
catch(ThreadAbortException)
{
throw; // EDIT: apparently this is not required :-)
}
catch(Exception e)
{
// Catch other exceptions
}
Martin 是正确的,当您使用 Response.Redirect 时会抛出 ThreadAbortException,请参阅此处的 kb 文章
您可能引用了在 try 块中声明的变量。
例如,以下代码无效:
try
{
var b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
if (b)
{
Response.Redirect("somewhere else");
}
}
您应该将 b 声明移到 try-catch 块之外。
var b = false;
try
{
b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
if (b)
{
Response.Redirect("somewhere else");
}
}
我认为这里没有任何已知问题。
您根本无法在 try/catch 块内执行 Redirect(),因为 Redirect 将当前控件留给另一个 .aspx(例如),这会使捕获悬而未决(无法返回)。
编辑:另一方面,我可能已经把所有这些都倒过来了。对不起。