我有一个应用程序,我正在使用Web API调用我的所有操作。
现在我要求我需要跟踪我们的API调用,这意味着调用API的次数以及调用了多少次的方法。我需要将所有信息插入数据库以供将来响应。
任何人都知道如何实现?请分享。
我在想什么:
在application_beginrequest下的global.asax中,我将检查网址并尝试查找API方法名称。
然后可以通过异步调用将方法名称推送到DB。
注意:
它会降低API性能吗?
答案 0 :(得分:0)
使用ActionFilter。您不希望通过日志记录丢弃代码。
public class MyLoggingFilter: ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
Log...
//actionContext.ActionDescriptor.ActionName
//actionContext.ControllerContext.ControllerDescriptor.ControllerName;
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
Log...
}
}
然后,您应该为WebApiConfig
中的所有控制器注册动作过滤器public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Filters.Add(new MyLoggingFilter());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
然后考虑使用Logging框架,如Log4Net或NLog - 这些框架将具有登录任何存储类型(SQL,文件,等等)的附加程序。这些框架将以异步方式记录,因此不会减慢请求的执行速度。