我正在使用 MVC 4 Web API 为应用程序创建服务层。我正在尝试创建一个全局过滤器,它将对 API 的所有传入请求起作用。现在我明白这必须与标准 MVC 全局操作过滤器不同的配置。但是我在获取我在网上找到的任何示例时遇到问题。
我遇到的问题是使用 Web API 注册过滤器。
我的 Global.asax 是这样设置的...
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
MVCConfig.RegisterRoutes(RouteTable.Routes);
MVCConfig.RegisterGlobalFilters(GlobalFilters.Filters);
WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration);
WebApiConfig.RegisterGlobalFilters(GlobalConfiguration.Configuration.Filters);
}
}
我的标准 Mvc 路由和过滤器工作正常。我的 WebApi 路由也是如此。这是我的 webApi 过滤器注册...
public static void RegisterGlobalFilters(System.Web.Http.Filters.HttpFilterCollection filters)
{
filters.Add(new PerformanceTestFilter());
}
这里是 PerformanceTestFilter...
public class PerformanceTestFilter : ActionFilterAttribute
{
private readonly Stopwatch _stopWatch = new Stopwatch();
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
_stopWatch.Reset();
_stopWatch.Start();
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
_stopWatch.Stop();
var executionTime = _stopWatch.ElapsedMilliseconds;
// Do something with the executionTime
}
}
此过滤器在使用标准 Mvc GlobalFilterCollection 注册时工作正常,但是当我尝试使用 System.Web.Http.Filters.HttpFilterCollection 注册它时,我收到一条错误消息,指出它不能分配给参数类型 System.Web.Http。过滤器.IFilter。
所以我假设我的 PerformanceTestFilter 需要从 ActionFilterAttribute 以外的东西继承才能注册为 webapi 过滤器。我只是不确定那需要是什么。
我想我需要创建两个单独的过滤器来分别使用 mvc 和 webapi。如果有一种方法可以创建一个可以同时注册到两者的过滤器,那就太好了。但我主要关心的是让它为 webapi 工作。
谢谢