开始编写一个简单的过滤器,从每个操作加载的请求中提取一些内容,从其他 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 控制器。
Edit:我知道我可以通过继承 IActionFilter 并使用 OnActionExecuting 来实现此功能,我只是好奇为什么这种方法不起作用,因为一堆教程似乎都说它应该起作用。
我有同样的错误并且很困惑ElmahHandledErrorLoggerFilter
确实实施IExceptionFilter
.
经过调查后,我踢了自己一脚,我添加了filters.Add(new ElmahHandledErrorLoggerFilter());
到 FilterConfig 类下的 MVC 站点配置。添加config.Filters.Add(new ElmahHandleErrorApiAttribute());
而不是 WebApiConfig 类起作用。
注意:我在这里使用 WebAPi v1,但我已经以相同的方式配置了 v2 项目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)