在ASPX页面中,我希望在特定点(不是由于错误条件)结束响应,具体取决于代码路径,以便在流中不发送任何其他内容.所以自然使用:
Response.End();
Run Code Online (Sandbox Code Playgroud)
这会导致ThreadAbortException,这是设计使然.
以下似乎有效,但看起来不像这个问题的正确方法:
Response.Flush();
Response.Close();
Run Code Online (Sandbox Code Playgroud)
那么,这个怎么样?
Response.Flush();
Response.SuppressContent = true
Run Code Online (Sandbox Code Playgroud)
然后让页面正常完成.
我可以处理并吞下ThreadAbortException,但我只是想知道SuppressContent方法是否有任何错误/陷阱?
编辑: 举几个例子.假设我有一个ASPX页面,我可以将内容类型更改为多种可能性之一.根据内容类型和方案,在代码中的给定点我想阻止将更多内容发送到客户端.假设在SuppressContent设置为true后,运行任何进一步的服务器端代码都没有问题.我只是不想将任何其他内容发送给客户端.
编辑2: MyPage.aspx - 有一个母版页,可能包括标准内容,页眉,页脚等.此页面可以呈现为普通页面.它还可以写出要下载的(例如)XML文档.如果写出一个XML文档(在页面加载时确定),它将清除输出,将内容类型设置为XML,将所有XML写出,然后如果正常,最终将使用其余的ASPX页面呈现为坚持到底 - 这显然不是必需的/打破XML.
编辑3: 现在我正在使用SuppressContent方法.为了尝试结束这个问题,我提出了一个赏金,并且会以另一种方式提出问题:你什么时候应该使用SuppressContent?为什么要使用它而不是Response.End?
请参阅我在下面提供的答案,我实际上最终得到了解决方案,因为我最终找到了一种方法来避免使用Response.End时出现ThreadAbortException.到目前为止,我已经排除了答案.