关于c#:自定义操作筛选器ASP.NET MVC 4

Custom Action Filter ASP.NET MVC 4

这东西杀了我。 基本上,我拥有的是自定义ActionFilter(从ActionFilterAttribute继承并实现IActionFilter的类)。 看起来像这样

1
2
3
4
5
6
7
public class ValidationFilterAttribute : ActionFilterAttribute, IActionFilter
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        // do some stuff here
    }
}

这就是FilterConfig的样子

1
2
3
4
5
6
7
8
public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new ValidationFilterAttribute());
    }
}

但是每当我开始项目时,都会有一个例外

给定的过滤器实例必须实现以下一个或多个过滤器接口:IAuthorizationFilter,IActionFilter,IResultFilter,IExceptionFilter。

但是显然ValidationFilterAttribute实现了这些接口之一。 我在这里错过了一些非常基本的东西吗? 我不知道怎么了。


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

所以那么你将不得不重写

1
OnActionExecuting(ActionExecutingContext filterContext)

一切都会好起来的。

如您所见,ActionFilterAttribute已经实现了IActionFilter,因此您无需指定它。


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

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

还要检查此:http://forums.asp.net/t/1835666.aspx


1
2
3
4
5
[Serializable] public class RedirectingAction : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context) { base.OnActionExecuting(context);

}

之后,在控制器中使用此属性,如下所示

1
2
[RedirectingAction]
public class HomeController : BaseController { }

www.jkittraining.com的自定义操作过滤器示例
www.jkittraining.com/course/asp-net-mvc-training/