我一直在尝试使用Response.End()方法,并且一直收到此错误;
[System.Threading.ThreadAbortException] = {Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}
我用谷歌搜索了这个,从我看到的有两个解决方案,一个是使用HttpContext.Current.ApplicationInstance.CompleteRequest();
,另一个是捕获异常而什么都不做。
首先,'抓住并且什么也不做'似乎是一种非常“糟糕”的做法,当然我们应该实际处理异常或做一些事情以便不发生异常?当然这是好习惯吗?我不希望我的代码充满了大量的尝试。
另一种方法HttpContext.Current.ApplicationInstance.CompleteRequest();
似乎无效。
以下是我的代码片段:
Response.Clear();
Response.ClearHeaders();
Response.AddHeader("Content-Type", "text/html");
Response.Write("Blocked IP");
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
return;
我想要做的就是输出文本'Blocked IP',但是使用HttpContext.Current.ApplicationInstance.CompleteRequest();
方法,aspx页面的其余部分将被打印在它下面:
Blocked IP
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
</title></head>
<body>
<form method="post" action="Email.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZIELtfylTwZMU8vGWe9UrhWClqN3i4rMTvAp8otze+6G" />
</div>
<div>
</div>
</form>
</body>
</html>
答案 0 :(得分:3)
这是有意的。它被设计为抛出此异常,因此asp.net知道停止当前的执行。
Calls to the End, Redirect, and Transfer methods throw a ThreadAbortException exception when the current response ends prematurely.
它被用于在Reponse.End()
内调用Page_Init
的地方,它不允许ASP.NET调用Page_Load
以及页面生命周期中的其他事件