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

Has*_*jmi 5 asp.net-mvc action-filter asp.net-web-api

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

在网络 API 中:

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)

HttpActionExecutedContext 位于system.web.http.filters

在MVC中:

public override void OnActionExecuted(ActionExecutedContext actionExecutedContext)
Run Code Online (Sandbox Code Playgroud)

ActionExecutedContext 位于system.web.mvc

我希望在 Web api 或 MVC 时为我的所有控制器提供一个过滤器。

那么我该如何解决这个问题呢?

Bad*_*dri 1

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

OWIN 中间件可能是更好的选择,但不幸的是 MVC 目前无法由 OWIN 托管。但是,您可以使用阶段标记在 ASP.NET 管道中您想要的阶段运行 OWIN 中间件,但据我所知,PipelineStage枚举是PreHandlerExecute最后一个阶段。这意味着你可以做类似OnActionExecuting但不可以的事情OnActionExecuted