WebApi:自定义筛选器

时间:2023-03-09 06:35:42
WebApi:自定义筛选器

最近在项目中有这样一个需求,记录每次Api访问的调用时间,运行时间,传入数据,返回数据等信息。

第一反应就是添加一个类,用来实现相应的功能,然后在方法的代码中添加,但是这样的话,需要修改所有的方法的代码,以后维护起来想想就可怕。

一番百度后,发现了筛选器。

在这里简单记录一下自定义筛选器的创建过程

1:创建一个类:LogActionFilter,继承ActionFilterAttribute,同时添加AttributeUsageAttribute特性。

[AttributeUsageAttribute(AttributeTargets.Method|AttributeTargets.Class, Inherited = true,AllowMultiple = true)]
public class LogActionFilter:ActionFilterAttribute
{ public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
} public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
base.OnActionExecuted(actionExecutedContext);
} }

 这里有两个重写的方法要注意:

  OnActionExecuting:在调用操作方法之前发生

  OnActionExecuted:在调用操作方法之后发生

2:根据设定的AttributeUsageAttribute特性,在类或者方法之前添加筛选器

[AttributeUsageAttribute(AttributeTargets.Method|AttributeTargets.Class, Inherited = true,AllowMultiple = true)]
    [LogActionFilter]
public class ValuesController : ApiController
{
/// <summary>
/// 接口地址测试
/// </summary>
/// <returns></returns>
[System.Web.Http.AcceptVerbs("Post")]
[System.Web.Http.ActionName("Rename")] public ResponseBody Get(ResponseBody Abc)
{
return Abc;
}
}

3:查看效果

  在方法体和OnActionExecuting,OnActionExecuted中添加断点,运行,调用接口后,观察调用的顺序。