2010-09-15 94 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

相關問題