在Web APi中的每个操作之后触发某些方法

use*_*534 3 c#-4.0 asp.net-web-api

我正在编写ASP.NET WEB API.

执行Action后,我想调用一个方法.

例如:

 public string Action1(object a)
 {
     // ...
     // call method1();
     return "sample1";
 }

 public string Action2(object b)
 {
     // ...
     // call method1();
     return "sample2";
 }
Run Code Online (Sandbox Code Playgroud)

有没有办法method1()在不提及每一个动作的情况下调用每个动作?

Mag*_*ing 8

您可以实现自定义System.Web.Http.Filters.ActionFilterAttribute并调用method1()内部OnActionExecuted(...):

public class MyActionFilter : System.Web.Http.Filters.ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        // call method1();
        // ...
        base.OnActionExecuted(actionExecutedContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以[MyActionFilter]在操作上,控制器上使用它,或将其添加到全局配置中WebApiConfig.cs:

        config.Filters.Add(new MyActionFilter());
Run Code Online (Sandbox Code Playgroud)