ASP .NET 中的全局异常过滤器 [重复]

Posted

技术标签:

【中文标题】ASP .NET 中的全局异常过滤器 [重复]【英文标题】:Global Exception Filter in ASP .NET [duplicate] 【发布时间】:2021-02-11 07:23:21 【问题描述】:

我刚刚在 ASP .NET 中为处理 API 的应用程序制作了一个自定义异常过滤器。

我通过将以下代码添加到 WebApiconfig.cs 使其全局化

public static class WebApiConfig
    
        public static void Register(HttpConfiguration config)
        
            config.Filters.Add(new Filters.ExceptionFilter());      //Declaration of Exception Filter
        
    

但是今天有人告诉我,过滤器需要在 global.asax 中声明。我尝试添加它,但它不起作用。

如何在 global.asax 中声明异常过滤器?

【问题讨论】:

你的Register()方法在global.asax中被调用了吗? 谁告诉你它需要在 global.asax 中声明?您确定您的 global.asax 尚未使用此注册方法吗?查看 Application_Start 事件。您尝试添加什么,“它不起作用”是什么意思? @mason,不,我的寄存器不在 global.asax 中。我终于在一小时前通过将以下内容添加到 app_start 来让它工作:GlobalConfiguration.Configuration.Filters.Add(new Filters.ExceptionFilter()); 【参考方案1】:

因此,我找到了大约 2 个相同的解决方案,但在网上任何地方都找不到。

最好的解决方案是使用 System.Web.Http 命名空间的 GlobalConfigutation 方法添加您的过滤器。我添加了以下行:

GlobalConfiguration.Configuration.Filters.Add(new Filters.ExceptionFilter());, 其中 Filter 是一个包含 ExceptionFilter.cs 的目录。

【讨论】:

过滤器不是包含 ExceptionFilter.cs 的目录。在 C# 中,当涉及到类名时,我们并不关心文件夹。相反,我们关心namespaces。默认情况下,当您创建新的 C# 文件时,命名空间的开头将与您的项目配置的内容相匹配,并且放置它的任何文件夹都将作为命名空间中的附加段附加到它。但这不是必需的,您可以自定义命名空间。

以上是关于ASP .NET 中的全局异常过滤器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc 自定义全局过滤器 验证用户是否登录

ASP.NET开发知识总结

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

如何使用 mvc 6、asp.net 5 注册全局过滤器

全局记录来自 ASP.NET [ScriptService] 服务的异常

ASP.Net MVC过滤器