2010-09-15 93 views
17

我的global.asax似乎没有被触发。我有:global.asax Application_Error没有触发

void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs 
    Server.Transfer("~/ExceptionFormView.aspx"); 
} 

在我的web.config中,我没有任何像CustomErrors。因为我希望所有的东西都能被Global.asax处理并转移到ExceptionFormView.aspx。

它在本地正常工作,但在部署到服务器时无法正常工作。有什么想法吗?

我需要PrecompiledApp.config吗?

回答

19

如果你没有在你的web.config一个customErrors部分,它是一样的具有mode="RemoteOnly"部分。此自定义错误模式将使本地请求(从运行IIS的服务器生成)不使用自定义错误,并且它将按预期执行Application_Error()方法。远程请求将使用customErrors而不执行上述方法。

这解释了您在本地看到的不同于您的服务器的行为的原因。您可以通过将customErrors模式显式更改为On或Off来在任何环境中重现此行为。 On将不会在Off时执行Application_Error()部分。

<customErrors mode="On|Off|RemoteOnly" /> 

这不会解决你的课程的问题,这是你想要的,无论要执行的方法。我在another question上有一个奖励,我们试图找出当customErrors模式为On时,Application_Error()方法未触发的原因。几天后再回来看看我们是否找到了解决方案。

4

如果您使用的是IIS 7,可以尝试设置:

Response.TrySkipIisCustomErrors = true; 
+0

参考:https://github.com/13daysaweek/Mvc4CustomErrorPage 和http://blog.janjonas.net/2011-04-13/asp_net-prevent-iis_75_overriding-custom-error-page-iis-default-错误页面 – lahphim 2014-07-24 08:58:25

+0

完美,谢谢:) – mt025 2017-04-07 13:05:58

3

如果您以前部署应用程序预编译的,但现在你没有,那么,你需要删除PrecompiledApp.config和你Deployment.dll在bin目录中。 .NET将使用Deployment.dll中的全局代码而不是您的更改。

+0

这对我有效!过去6个小时,我一直在圈子里转转,只是注意到这是由于预编译造成的! – 2013-09-24 13:43:06

+0

我的问题恰恰相反。以前,我的应用程序是未预编译的,但现在它已预编译。我验证了PrecompiledApp.config位于我的网站的根目录中,但是我的Application_Start()仍然没有启动。 – 2017-10-25 20:42:29

相关问题