Asp.net Global.asax中的应用程序_错误事件未在IIS7中触发,但在IIS6中工作正常

Asp.net Global.asax中的应用程序_错误事件未在IIS7中触发,但在IIS6中工作正常,asp.net,asp.net-mvc-5,iis-7.5,iis-6,global-asax,Asp.net,Asp.net Mvc 5,Iis 7.5,Iis 6,Global Asax,去年,我们将web应用程序迁移到了一个新服务器上。以下是迁移前的系统/应用程序配置规范: Windows Server 2003 IIS 6.0 ASP.NET 4.0 网络表单 以下是移动到新服务器后的规格: Windows Server 2008 IIS 7.5 ASP.NET 4.5.1 由于VS 2013,WebForms/MVC 5混合版 问题是,在移动导致环境发生剧烈变化之后,Global.asax中的应用程序错误事件不再像以前那样触发。我在这个问题上遇到了很多问题,但没有一个解决方

去年,我们将web应用程序迁移到了一个新服务器上。以下是迁移前的系统/应用程序配置规范:

Windows Server 2003 IIS 6.0 ASP.NET 4.0 网络表单 以下是移动到新服务器后的规格:

Windows Server 2008 IIS 7.5 ASP.NET 4.5.1 由于VS 2013,WebForms/MVC 5混合版 问题是,在移动导致环境发生剧烈变化之后,Global.asax中的应用程序错误事件不再像以前那样触发。我在这个问题上遇到了很多问题,但没有一个解决方案是有效的。他们也很老了,所以我认为SE应该对这个话题给出一些更新的答案

我想做的是:

如果引发特定的异常,我希望导航到特定的错误页面。否则,转到myweb.config中定义的error.aspx。自从移动之后,我没有对web.config或代码进行任何更改。下面是应用程序错误事件:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)

    If TypeOf (Server.GetLastError) Is System.Web.HttpRequestValidationException Then
        NavigateToErrorPage("Display special error message here")
    End If

End Sub
web.config中的自定义错误:

<customErrors mode="RemoteOnly" defaultRedirect="error.aspx" />
那么,我需要做什么才能让我的应用程序在IIS 7.5中的行为与在IIS 6中的行为相同呢

编辑:我将注意到,当在本地主机下本地运行我的应用程序时,将触发Application_错误事件

我发现的其他问题在这里无法帮助我:


事实证明,这些答案毕竟是正确的:

我最终将代码更改为:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)

    Dim ex As Exception = Server.GetLastError

    If TypeOf ex Is System.Web.HttpRequestValidationException Then
        Server.ClearError()
        'NavigateToErrorPage() calls Server.Transfer()

        NavigateToErrorPage("Display special error message here")
    End If

End Sub
在旧配置和新配置之间,在框架方面肯定发生了一些变化,因为这在以前工作得很好,因此我感到困惑。很可能是IIS或者MVC被引入webforms项目。我只能在这一点上进行理论分析,但似乎在Application_Error事件中调用Server.Transfer也有调用Server.ClearError的次要影响。然而,在新的环境中,情况不再如此。我敢打赌Server.Transfer确实会尝试导航到自定义页面,但是,由于错误在事件结束时没有被清除,ASP.NET的默认错误处理将进入并将用户带到error.aspx

因此,这似乎毕竟是一个被愚弄的问题,尽管对于那些经历了剧烈环境变化并想知道为什么他们从未更改过的代码突然停止工作的其他人来说,这很重要