簡體   English   中英

不在生產服務器上調用OnException

[英]OnException is not called on production server

我有一個MVC 4應用程序,其中基本控制器覆蓋OnException方法,如下所示。 在開發過程中一切正常(IIS Express 8.5),但是一旦將應用程序部署到生產環境(2012 R2 / IIS 8.5),就不會調用該方法。 用戶看到標准YSOD錯誤消息。

public override void OnException(ExceptionContext filterContext)
{
   //Code here
}

我已確認兩個應用程序的web.config文件是相同的。 web.config文件的CustomErrors部分設置為“On”

   <customErrors mode="On" />

我非常仔細地比較了應用程序文件,並且部署中沒有差異。 我期待這個問題是在IIS設置中,我似乎無法通過谷歌或通過四處尋找。

謝謝你的幫助!

OnException方法中引發的異常可能導致應用程序的行為就像沒有調用該方法一樣。 我有問題的實現包括調用將錯誤消息保存到自定義Windows錯誤日志,但是分配給IIS應用程序池標識的執行權限不足以創建新的事件日志源。 刪除日志記錄邏輯后,問題就解決了。 這是詳細信息。 (一旦我證明這是有效的,我已經添加了記錄邏輯)。

這對我有用:

首先,確保正確配置了web.config。 需要注意的兩個片段是:

<system.web> <customErrors mode="On" /> </system.web>

<system.webServer> 
     <httpErrors errorMode="DetailedLocalOnly" />
</system.webServer>

其次,以下內容位於我的基本控制器中,應用程序中的所有其他控制器都從該控制器繼承:

        protected override void OnException(ExceptionContext filterContext)
        {
            if (filterContext.ExceptionHandled)
            {
                return;
            }

            filterContext.Result = Error(filterContext.Exception.Message,filterContext.Exception.StackTrace);
            filterContext.ExceptionHandled = true;
        }

        public ActionResult Error(string Message, string StackTrace, string ReturnUrl)
        {                 
            ViewBag.ErrorMessage = Message;
            ViewBag.StackTrace = StackTrace;
            ViewBag.ReturnUrl = ReturnUrl;

            return View("~/Views/Shared/MyError.cshtml");
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM