Response.Redirect无法访问的代码

时间:2015-02-03 19:47:49

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

是否有任何情况可以在给定绿色的情况下调用红色?

Unreachable code snippet

2 个答案:

答案 0 :(得分:4)

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

您可以通过将false传递给Redirect()来阻止回复结束:

Response.Redirect(PageRedirect, false);

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

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

答案 1 :(得分:1)

从不。

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

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