gpt4 book ai didi

asp.net-mvc - MVC4 自定义 HandleErrorAttribute,未调用 global.asax 中的方法

转载 作者:行者123 更新时间:2023-12-02 13:50:18 25 4
gpt4 key购买 nike

我无法在我的 MVC4 应用程序中使用自定义 HandleErrorAttribute。

记录异常的自定义类

  public class HandleAndLogErrorAttribute : HandleErrorAttribute
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

public override void OnException(ExceptionContext filterContext)
{
var message = string.Format("Exception : {0}\n" +
"InnerException: {1}",
filterContext.Exception,
filterContext.Exception.InnerException);
Logger.Error(message);
base.OnException(filterContext);
}
}

在 Global.asax 中,我添加了一个新的静态方法:

  public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleAndLogErrorAttribute()); //Todo: log all errors
throw new Exception("not called???");
}

}

当抛出异常时,会加载 error.chstml,但永远不会调用自定义 HandlErrorAttribute 中的 OnException 重写。

我怀疑 Global.asax 中的 RegisterGlobalFilters 方法没有被调用,并且在那里抛出异常(参见代码)证实了这一点。该异常永远不会抛出。

在 web.config 文件中,我将 customErrors 设置为 On:

<customErrors mode="On">
</customErrors>

我在另一个解决方案中使用了相同的方法,但我不明白为什么这个 HandleErrorAttribute 扩展不起作用。

最佳答案

您在 Global.asax 中创建了 RegisterGlobalFilters 方法,但从 MVC 4 开始,全局过滤器注册是在 App_Start/FilterConfig.cs 中的单独文件中指定的.

Global.asax 中的 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters) 行正在调用指定文件中定义的注册。

在指定文件中添加自定义过滤器注册,或在 Application_Start 中手动调用您的(本地)RegisterGlobalFilters

关于asp.net-mvc - MVC4 自定义 HandleErrorAttribute,未调用 global.asax 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17451061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com