我正在使用 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.Filters.IFilter参数类型。
因此,我认为我的PerformanceTestFilter需要继承自除ActionFilterAttribute之外的其他内容,以便作为webapi过滤器进行注册。但我不确定需要继承什么。
我想我需要创建两个单独的过滤器,分别与mvc和webapi配合使用。如果有办法创建一个可以注册到两者的过滤器,那就太棒了。但我主要关心的是让它在webapi中正常工作。
谢谢