代码之家  ›  专栏  ›  技术社区  ›  Richard Ev

重定向-对流控制使用异常?

  •  2
  • Richard Ev  · 技术社区  · 16 年前

    Response.Redirect

    public void Redirect(string url)
    
    Parameters:
    url: The target location.
    public void Redirect(string url, bool endResponse)
    Parameters:
    url: The location of the target.
    endResponse: Indicates whether execution of the current page should terminate.

    如果我调用第一个重载,或者调用第二个重载 endResponse 着手 true A. ThreadAbortException

    我为什么要使用这种方法?这不是一个使用异常处理程序流的示例吗?(因此是件坏事)

    如果我的重定向确实需要一个例外,那么我抛出一个包含 原因 为了重定向?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Zhaph - Ben Duguid    16 年前

    如果您将endResponse设置为“true”,则实际上是在说“我已完成此页面,忽略我之后的任何内容”。

    从…起 MSDN :

        2
  •  2
  •   MikeW    16 年前

    Zhaph是对的,发生这种异常是因为您在try-catch块中重定向。

    而不是

    try {
        ...
        Response.Redirect(url);
    } catch {
        ...
    }
    

    按照以下思路做一些事情:

    bool bSuccess = true;
    try {
        ...
    } catch {
        bSuccess = false;
        ...
    }
    
    if (bSuccess) {
        Response.Redirect(url);
    }
    
        3
  •  1
  •   Damien_The_Unbeliever    16 年前

    我认为asp.net团队采用了这种方法,而不是a)使用函数的返回值(这意味着如果函数具有逻辑返回值,则必须通过Ref/Out参数来处理),或者b)在请求上设置标志。当然,ASP.Net本身就是为了纪念这一标志而编写的,但是有多少初学者会相信他们应该检查它(在每次函数调用之后?),因此他们可能仍然会做一些将被浪费的繁重工作。

        4
  •  1
  •   yfeldblum    16 年前

    当然 通常 事实并非如此。所以,如果您发现自己对控制流使用异常,请仔细检查是否没有更好的替代方案。

    响应异常。重定向以中止当前线程通常是一件好事,因为这正是您希望发生的。