开始编写一个简单的过滤器,在每次动作加载时从请求中提取一些东西,从其他 stackoverflow 中复制一些代码,如下所示:
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 控制器(不过,将其添加到 GlobalConfiguration.Configuration.Filters 确实有效),而是普通的 Web 控制器。
编辑:我知道我可以通过从 IActionFilter 继承并使用 OnActionExecuting 来实现这个工作,我只是好奇为什么这种方法不起作用,因为一堆教程似乎说它应该。