为MVC和Web Api控制器采用动作过滤器

时间:2014-01-16 13:37:07

标签: asp.net-mvc asp.net-web-api action-filter

如您所知,MVC和Web api操作过滤器为其过滤器使用不同的名称空间:

web api中的

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)

HttpActionExecutedContext位于system.web.http.filters

MVC中的

public override void OnActionExecuted(ActionExecutedContext actionExecutedContext)

ActionExecutedContext位于system.web.mvc

我想在web api或MVC时为我的所有控制器安装一个过滤器。

那我怎么解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

MVC和Web API是不同的框架,它们聚合的地方是托管部分。此时,MVC和Web API可以是Web托管(IIS + ASP.NET管道),因此您可以编写IIS模块来执行您想要的操作。

OWIN中间件可能是更好的选择,但遗憾的是MVC此时无法进行OWIN托管。但是,您可以使用舞台标记在您想要的阶段在ASP.NET管道中运行OWIN中间件,但据我所知,PipelineStage枚举已将PreHandlerExecute作为最后一个阶段。这意味着您可以执行类似OnActionExecuting但不能OnActionExecuted的操作。