【问题标题】:How to Get number of hits to the Web API method如何获取 Web API 方法的点击次数
【发布时间】:2017-05-25 08:25:04
【问题描述】:

我有一个应用程序,我的所有操作都使用 Web API 调用。

现在我有一个要求,我需要跟踪我们的 API 调用,这意味着我的 API 被调用了多少次,以及哪个方法被调用了多少次。我也需要将每条信息都插入到数据库中以供将来响应。

有人知道如何实现吗?请分享。

我在想什么:

在 application_beginrequest 下的 global.asax 中,我将检查 url 并尝试查找 API 方法名称。

然后可以通过异步调用将方法名称推送到DB。

注意:
它会降低 API 性能吗?,

【问题讨论】:

  • 我猜最好的方法是编写一个“trackdown”方法、类等等......并在每个 api 操作中使用它
  • 我已经尝试了下面的方法,因为 api 已经在那里修改 api 代码我认为这不是一个好主意,因为我们有很多方法所以我创建了一个全局操作过滤器并在这些动作过滤器我已经编写了一些代码来跟踪 API 方法调用。感谢您的支持

标签: .net c#-4.0 asp.net-web-api global-asax


【解决方案1】:

使用 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 }
        );
}

然后考虑使用 Log4Net 或 NLog 之类的 Logging 框架 - 这些框架将有附加程序来记录到任何存储类型(SQL、到文件等)。这些框架将异步记录,因此不会减慢请求的执行速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多