Response.Redirect 无法访问的代码

Response.Redirect unreachable code

有没有什么情况可以给定绿色叫红色的?

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

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

Response.Redirect(PageRedirect, false);

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

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

从来没有。

大多数代码分析器不会在 HttpResponse.Redirect(url) 未执行后找出代码 - 因此 compiler/analizers 会抱怨红色代码可能是错误的。

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