这件事让我伤心。基本上我所拥有的是自定义ActionFilter(继承自ActionFilterAttribute并实现IActionFilter的类)。看起来像这样
public class ValidationFilterAttribute : ActionFilterAttribute, IActionFilter
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
// do some stuff here
}
}
这就是FilterConfig的样子
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new ValidationFilterAttribute());
}
}
但是每当我开始这个项目时都会有一个例外,说明
给定的过滤器实例必须实现以下一个或多个过滤器接口:IAuthorizationFilter,IActionFilter,IResultFilter,IExceptionFilter。
但显然ValidationFilterAttribute
实现了其中一个接口。我错过了一些非常基本的东西吗?我无法弄清楚出了什么问题。
答案 0 :(得分:8)
使用System.Web.Mvc
为您的基类添加前缀,我有一个“预感”,您可能正在使用System.Web.Http.Filters.ActionFilterAttribute
。
那么你必须覆盖
OnActionExecuting(ActionExecutingContext filterContext)
事情会好的。
正如您所看到的,ActionFilterAttribute
已经实现了IActionFilter
,因此您无需指定它。
答案 1 :(得分:1)
据我所知,您不需要IActionFilter
声明。
ActionFilterAttribute
已实施IActionFilter
但我不知道这是否是错误消息的原因。你可以尝试删除吗?
答案 2 :(得分:0)
[Serializable] public class RedirectingAction : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context) { base.OnActionExecuting(context);
}
之后在您的控制器中使用此属性,如下所示
[RedirectingAction]
public class HomeController : BaseController { }
www.jkittraining.com的自定义操作过滤器示例 www.jkittraining.com/course/asp-net-mvc-training /