gpt4 book ai didi

asp.net - 使用简单的 ActionFilterAttribute 运行时出错

转载 作者:行者123 更新时间:2023-12-04 22:48:26 24 4
gpt4 key购买 nike

开始编写一个简单的过滤器来在每个 Action 加载时从请求中提取一些东西,从其他 stackoverflows 复制一些代码,如下所示:

public class TestKeyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext context)
{
if (context.Request.Properties.ContainsKey("test"))
{
// do stuff
}
}
}

然后添加了其余的属性:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
GlobalConfiguration.Configuration.Filters.Add(new ElmahHandledErrorLoggerFilter());
filters.Add(new HandleErrorAttribute());
filters.Add(new TestKeyAttribute());
}

在运行时,导致此错误:
The given filter instance must implement one or more of the following filter
interfaces: IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter.

我发现的大多数链接都与 MVC 3 相关,这似乎有效;但是,我正在使用 MVC 4 并使用 Web API - 现在还有其他方法需要注册该属性吗?

请注意:我不希望过滤器附加到 Web API Controller (不过,将其添加到 GlobalConfiguration.Configuration.Filters 确实有效),而是普通的 Web Controller 。

编辑:我知道我可以通过从 IActionFilter 继承并使用 OnActionExecuting 来实现它,我只是好奇为什么这种方法不起作用,因为一堆教程似乎说它应该起作用。

最佳答案

我也有同样的错误,很困惑 ElmahHandledErrorLoggerFilter确实实现 IExceptionFilter .

经过调查,我踢了自己,我加了filters.Add(new ElmahHandledErrorLoggerFilter());到 FilterConfig 类下的 MVC 站点配置。添加 config.Filters.Add(new ElmahHandleErrorApiAttribute());而是到 WebApiConfig 类工作。

注意:我在这里使用的是 WebAPi v1,但我已经以相同的方式配置了一个 v2 项目。

关于asp.net - 使用简单的 ActionFilterAttribute 运行时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280542/

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