自定义操作过滤器ASP.NET MVC 4

时间:2013-11-19 13:09:53

标签: c# asp.net-mvc

这件事让我伤心。基本上我所拥有的是自定义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实现了其中一个接口。我错过了一些非常基本的东西吗?我无法弄清楚出了什么问题。

3 个答案:

答案 0 :(得分:8)

使用System.Web.Mvc为您的基类添加前缀,我有一个“预感”,您可能正在使用System.Web.Http.Filters.ActionFilterAttribute

那么你必须覆盖

OnActionExecuting(ActionExecutingContext filterContext)

事情会好的。

正如您所看到的,ActionFilterAttribute已经实现了IActionFilter,因此您无需指定它。

答案 1 :(得分:1)

据我所知,您不需要IActionFilter声明。 ActionFilterAttribute已实施IActionFilter

但我不知道这是否是错误消息的原因。你可以尝试删除吗?

另请检查:http://forums.asp.net/t/1835666.aspx

答案 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 /