调试模式出错

时间:2018-06-13 14:43:43

标签: c# visual-studio global-asax

当我在调试模式下运行我的代码时,我得到一个异常(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");
        }
    }

2 个答案:

答案 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”);