当我在调试模式下运行我的代码时,我得到一个异常(System.Web.HttpException:'请求在此上下文中不可用'),但是当我在发布模式(Ctrl-F5)中运行时,异常没有甚至不会出现。例外情况显示在Server.Transfer
行。
当我在调试模式下运行时,如何防止这种情况发生?
protected void Application_Error(object sender, EventArgs e)
{
//Gets the last error, emails it
var exc = Server.GetLastError();
Server.ClearError();
if (exc == null)
{
exc = new ApplicationException("*** Application Exception - Unknown/null exception ***");
}
if (exc is HttpException)
{
var errorCode = ((HttpException)exc).GetHttpCode();
Response.Redirect("~/ErrorPage.aspx?e=" + errorCode.ToString());
}
else
{
exc.Publish();
Server.Transfer("~/ErrorPage.aspx?e=unknown");
}
}
答案 0 :(得分:1)
我认为问题可能是IIS在调试时以单线程模式运行。 Server.Transfer
对当前请求后面的消息进行排队,该消息调用它但当前请求无法完成,因为Server.Transfer
因线程被阻塞而无法完成。
尝试从初始请求中删除所有断点,然后在ErrorPage.aspx
中添加一个断点。
或者,尝试使用Response.Redirect
代替Server.Transfer
。因为Response.Redirect
将返回到客户端,所以它会完成当前请求。我意识到这可能不是您需要的功能,但它有助于调试,然后您可以返回Server.Transfer
进行实时运行。
答案 1 :(得分:0)
Server.Transfer只能发生在单个HttpContext上。每个虚拟目录或应用程序都有自己的HttpContext对象,他们不知道它们共存!
您可以在此处找到更完整的说明Error Message When You Use Server.Transfer or Server.Execute in ASP.NET Page
解决方法是更改另一个方法,例如 Response.Redirect(“〜\ somepath.aspx”); 或 HttpContext.Current.RewritePath(“somepath.aspx”); 强>