C# 我的VisualStudio2008Web应用程序在第一次运行时不断抛出.Net错误,但刷新会修复它

C# 我的VisualStudio2008Web应用程序在第一次运行时不断抛出.Net错误,但刷新会修复它,c#,.net,asp.net,C#,.net,Asp.net,正如标题“我的web应用程序成功构建”中所述,尽管每次在调试模式下运行它时都会出现以下.Net错误: 如果我点击刷新,那么在我下次再次启动之前,应用程序不会再出现错误,有什么想法吗 这是我的global.asax文件: <%@ Application Language="C#" Inherits="MyCompany.Web.MyApp.Shell.CustomWebClientApplication" %> <script runat="server">

正如标题“我的web应用程序成功构建”中所述,尽管每次在调试模式下运行它时都会出现以下.Net错误:

如果我点击刷新,那么在我下次再次启动之前,应用程序不会再出现错误,有什么想法吗

这是我的global.asax文件:

<%@ Application Language="C#" Inherits="MyCompany.Web.MyApp.Shell.CustomWebClientApplication" %>

<script runat="server">

    void Session_End(Object Sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
    }

    protected void Session_Start(Object sender, EventArgs e)
    {
        if (Session.IsNewSession)
        {
            Response.Redirect(System.Web.Configuration.WebConfigurationManager.AppSettings["HomePage"]);
        }
    }

    protected void Application_Error(Object sender, EventArgs e)
    {
        System.Exception oops = Server.GetLastError();

        //Injection attack error handling
        if (oops.GetBaseException() is System.Web.HttpRequestValidationException)
        {
            Response.Redirect("ErrorPage.aspx");
        }
    }

</script>

无效会话\u结束(对象发送方,事件参数e)
{
FormsAuthentication.SignOut();
}
受保护的无效会话\u启动(对象发送方,事件参数e)
{
if(Session.IsNewSession)
{
重定向(System.Web.Configuration.WebConfigurationManager.AppSettings[“HomePage”]);
}
}
受保护的无效应用程序\u错误(对象发送方,事件参数e)
{
System.Exception oops=Server.GetLastError();
//注入攻击错误处理
if(oops.GetBaseException()是System.Web.HttpRequestValidationException)
{
重定向(“ErrorPage.aspx”);
}
}

听起来像是初始化问题。您可能试图在资源初始化之前使用它,但在刷新时,它已经有时间进行初始化。

您有一些东西试图访问设置为null(或尚未初始化)的变量。您是否在Global.asax中有任何内容或在应用程序启动时启动的任何内容?您是否有在应用程序启动时启动的异步操作

查看您的Home.aspx页面,了解那里发生了什么。看起来您的应用程序重定向到了该页面,所以我猜在init或page_load事件中,有某个正在执行的东西导致了问题

System.Exception oops
我认为这是问题的根源。当没有从中返回对象时

Server.GetLastError();
然后您将在第行获得NullReferenceException

oops.GetBaseException()
这很有道理。在第一次运行时,oops为null(因为之前没有发生错误),因此引发NullReferenceException。在第二次页面刷新时,GetLastError()返回引用上一个错误(NullReferenceException)的对象,并显示页面。在访问对象之前,始终检查对象是否为null


无论如何,您都可以尝试捕获所有运行时异常(调试->异常->公共语言运行时),并查看问题所在

看起来WebClient应用程序需要某种初始化?不,这不是问题所在。我注释掉了Application\u Error中的所有内容,然后在Application\u Error上设置了一个断点。当我第一次运行应用程序时,它会自动命中此断点,然后当我进一步进入该断点时,以下方法中会发生错误:protected override void DefaultProcessBrowsers(bool ignoreApplicationBrowsers、System.Collections.Specialized.NameValueCollection headers、System.Web.HttpBrowserCapabilities browserCaps){this.DefaultrefbrowseridAProcess(标头、browserCaps);if(ignoreApplicationBrowsers){}…}