2

我正在构建一个 ASP.NET MVC 5 Web 应用程序。使用以下方法,我的OnException方法永远不会运行(我不能断点它并且抛出未捕获的异常也不会做任何事情,所以我假设它永远不会运行)

using Elmah;
using System;
using System.Web;
using System.Web.Mvc;

namespace App.WebUI
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new ElmahHandledErrorLoggerFilter());
            filters.Add(new HandleErrorAttribute());
        }
    }

    public class ElmahHandledErrorLoggerFilter : IExceptionFilter
    {
        public void OnException(ExceptionContext context)
        {
            // Log only handled exceptions, because all other will be caught by ELMAH anyway.
            if (context.ExceptionHandled)
            {
                ErrorSignal.FromCurrentContext().Raise(context.Exception);
            }
        }
    }
}

这是我的 global.asx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace App.WebUI
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

请帮忙。

4

1 回答 1

1

尝试这个:

确保您已在根 web.config 中启用自定义错误。

<system.web>
<customErrors defaultRedirect="~/Error"
                    mode="On">

      </customErrors>
</system.web>

完成此操作后,我已在本地 ElmahHandledErrorLoggerFilter.OnException 中执行了验证。

我已经明确地从控制器抛出异常来测试功能。

下面是我的代码:

测试控制器:

public ActionResult Index()
        {
            throw new Exception("gone!");
} 

过滤器配置文件

public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new ElmahHandledErrorLoggerFilter());
            filters.Add(new HandleErrorAttribute());
        }
        public class ElmahHandledErrorLoggerFilter : IExceptionFilter
        {
            public void OnException(ExceptionContext context)
            {
                // Log only handled exceptions, because all other will be caught by ELMAH anyway.
                //it is true
                if (context.ExceptionHandled)
                {
                    var dsf=context.ExceptionHandled;
                }
            }
        }
    }

它可能会解决您的问题

于 2014-06-02T17:12:46.173 回答