调试模式错误
Error in debug mode
当我 运行 我的代码处于调试模式时,我得到一个异常 (System.Web.HttpException: 'Request is not available in this context'),但是当我 运行 处于发布模式时 (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");
}
}
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");
我认为问题可能是 IIS 在调试时以单线程模式运行。 Server.Transfer
在调用它的当前请求后面排队一条消息,但当前请求无法完成,因为 Server.Transfer
无法完成,因为线程被阻塞。
尝试从您的初始请求中删除所有断点并在 ErrorPage.aspx
中添加一个断点。
或者,尝试 Response.Redirect
而不是 Server.Transfer
。因为Response.Redirect
会return给客户端它完成当前的请求。我意识到这可能不是您需要的功能,但它有助于调试,然后您可以 return 到 Server.Transfer
实时 运行.
当我 运行 我的代码处于调试模式时,我得到一个异常 (System.Web.HttpException: 'Request is not available in this context'),但是当我 运行 处于发布模式时 (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");
}
}
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");
我认为问题可能是 IIS 在调试时以单线程模式运行。 Server.Transfer
在调用它的当前请求后面排队一条消息,但当前请求无法完成,因为 Server.Transfer
无法完成,因为线程被阻塞。
尝试从您的初始请求中删除所有断点并在 ErrorPage.aspx
中添加一个断点。
或者,尝试 Response.Redirect
而不是 Server.Transfer
。因为Response.Redirect
会return给客户端它完成当前的请求。我意识到这可能不是您需要的功能,但它有助于调试,然后您可以 return 到 Server.Transfer
实时 运行.