c00*_*0fd 6 .net c# asp.net exception
说,我有一个try/catch块封装了一大块代码,然后在其中的某个地方我需要调用Response.Redirect:
protected void ButtonGo_Click(object sender, EventArgs e)
{
try
{
using(lockingMethod)
{
//Code...
//Somewhere nested in the logic
Response.Redirect(strMyNewURL);
//More code...
}
}
catch(Exception ex)
{
LogExceptionAsError(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下发生的是Response.Redirect
抛出一个异常,一些关于终止线程的事情,我认为这是该方法的"正常事件流",但它会记录在我LogExceptionAsError
的错误中.所以我很好奇,有没有办法让Response.Redirect
不抛出异常?
Response.Redirect
通过抛出此异常以使其未被处理来完成当前执行的终止,从而立即重定向。这是有意而为之的。在大多数情况下,你不应该自己去捕捉它——它违背了目的。如果您希望在重定向之前完成代码的执行,可以使用重载:
Response.Redirect(somewhere, false);
Run Code Online (Sandbox Code Playgroud)
这不会引发异常。除非您需要在重定向之前执行其他操作,否则这可能效率很低。
请注意,这通常是一种反模式 - 通过异常抛出和捕获来控制逻辑流...但是,对于此特定方法来说,这样做是有意义的,因为重定向通常不需要执行进一步的逻辑 - 只需响应 302 和要去的新地址。
尝试使用替代版本 Response.Redirect
Response.Redirect(strMyNewURL, false);
Run Code Online (Sandbox Code Playgroud)
它将终止当前页面加载。
归档时间: |
|
查看次数: |
8295 次 |
最近记录: |