AspNet web api 和mvc 过滤器差异

最近在维护老项目。定义个拦截器记录接口日志。但是发现不生效 
最后发现因为继承的  ApiController不是Controller
只能用 System.Web.Http下的拦截器生效。所以现在总结归纳一下
Web Api:   System.Web.Http.Filters.ActionFilterAttribute 继承该类
Mvc:   System.Web.Mvc.ActionFilterAttribute  继承该类

Mvc:
提供4个重写方法
OnActionExecuting  执行前
OnActionExecuted   执行后
OnResultExecuting  返回前
OnResultExecuted   返回后


Web Api:
提供4个重写方法
OnActionExecuting  执行前  OnActionExecutingAsync  执行前(异步)
OnActionExecuted   执行后  OnActionExecutedAsync   执行后(异步)
AspNet web api 和mvc 过滤器差异_第1张图片


根据自己需求重写方法。然后注入
注入有2种方法
1. Web Api 和 Mvc 通用的。直接打特性。作用域为打了特性的 Class / Action
我是新建了一个类继承基类避免全局+了。
AspNet web api 和mvc 过滤器差异_第2张图片

2.全局注入Filter:
Mvc:

在FilterConfig下注入
AspNet web api 和mvc 过滤器差异_第3张图片

Web Api:
AspNet web api 和mvc 过滤器差异_第4张图片
在WebApiConfig下注入
AspNet web api 和mvc 过滤器差异_第5张图片

 

你可能感兴趣的:(mvc,asp.net,c#)