调试模式错误

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 实时 运行.