【问题标题】:Response.Redirect unreachable codeResponse.Redirect 无法访问的代码
【发布时间】:2015-02-03 19:47:48
【问题描述】:

有没有什么情况可以叫红配绿?

【问题讨论】:

    标签: c# asp.net logic unreachable-code


    【解决方案1】:

    这看起来像是单元测试覆盖率,由于方法本身没有返回,它应该仍然到达代码。但是,如果您使用的自动化测试实际上参与了 HTTP 上下文,那么如果响应已结束,它将不会到达其他代码。

    您可以通过将false 传递给Redirect() 来防止响应结束:

    Response.Redirect(PageRedirect, false);
    

    然而,这可能是个坏主意。考虑一下这段代码在做什么的逻辑流程。重定向应该结束响应。如果有更多的服务器端处理要做,您可以选择不结束它,但这通常是非常不直观的。但是,如果服务器端处理是另一个重定向,那它应该做什么呢?重定向用户两次?重定向一次并忽略第二次?忽略第一个并执行第二个重定向?这很不直观。

    我建议组织代码以使响应在重定向中终止。虽然从技术上讲它不是该方法中的 return,但在这种情况下,它确实应该在逻辑上被视为一个。

    【讨论】:

    • 如果这个sn-p下面的代码依赖"A" = true无异常执行并且"A" = false在它下面,如果我删除红线并更改绿线会抛出异常to: Response.Redirect(PageRedirect, false); Context.ApplicationInstance.CompleteRequest();
    • @sammarcow:你问的不是很清楚,也许你可以用一个代码示例来更新这个问题?无论如何,我的建议是重定向下面不应该有额外的代码。在 Web 应用程序的逻辑上下文中,重定向应该是终止条件。
    【解决方案2】:

    从不。

    大多数代码分析器在 HttpResponse.Redirect(url) 未执行后将无法识别代码 - 因此编译器/分析器会抱怨红色代码可能是错误的。

    实际上它总是抛出 ThreadAbort 异常以避免无意中运行更多的请求处理代码 - HttpResponse.Redirect

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      相关资源
      最近更新 更多