ASP.NET Web API 接口执行时间监控

简介:

软件产品常常会出现这样的情况:产品性能因某些无法预料的瓶颈而受到干扰,导致程序的处理效率降低,性能得不到充分的发挥。如何快速有效地找到软件产品的性能瓶颈,则是我们感兴趣的内容之一。

在本文中,我将解释我如何清理和替换重复、 混乱遍布许多方法在应用程序中的代码使用ASP.NET Web API 的筛选器来完成ASP.NET Web API 接口执行时间监控。我们的项目中有如下的需求:我的工作相关的项目 (使用 ASP.NET Web API 框架) 要求记录下服务接口的调用执行时间以及请求延迟、 故障率每秒的请求总数,以帮助运营团队。

Web API 筛选器是你放到Action上的自定义属性方法 (或Controller) 添加常用功能。 Web API 筛选使您得以添加预处理和后处理的行为,本文的代码来自于How to intercept all the ASP.NET WebApi controller action methods calls with Ninject interception for logging? 和 Log duration of an ASP Web API action 。

下面是详细代码:

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Web; 
using System.Web.Http.Controllers; 
using System.Web.Http.Filters;

namespace ContactManager.Filters 
{ 
    public class TimingActionFilter : ActionFilterAttribute 
    { 
        private const string Key = "__action_duration__";

        public override void OnActionExecuting(HttpActionContext actionContext) 
        { 
            if (SkipLogging(actionContext)) 
            { 
                return; 
            } 
            var stopWatch = new Stopwatch(); 
            actionContext.Request.Properties[Key] = stopWatch; 
            stopWatch.Start(); 
        }

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
        { 
            if (!actionExecutedContext.Request.Properties.ContainsKey(Key)) 
            { 
                return; 
            }

            var stopWatch = actionExecutedContext.Request.Properties[Key] as Stopwatch; 
            if (stopWatch != null) 
            { 
                stopWatch.Stop(); 
                var actionName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; 
                var controllerName = actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName; 
                Debug.Print(string.Format("[Execution of{0}- {1} took {2}.]", controllerName, actionName, stopWatch.Elapsed)); 
            }

        }

        private static bool SkipLogging(HttpActionContext actionContext) 
        { 
            return actionContext.ActionDescriptor.GetCustomAttributes<NoLogAttribute>().Any() || 
                    actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<NoLogAttribute>().Any(); 
        }

    }

    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true)] 
    public class NoLogAttribute : Attribute 
    {

    } 
}

本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

目录
相关文章
|
1月前
|
JSON API 数据库
解释如何在 Python 中实现 Web 服务(RESTful API)。
解释如何在 Python 中实现 Web 服务(RESTful API)。
25 0
|
2月前
|
IDE Java API
使用Java Web技术构建RESTful API的实践指南
使用Java Web技术构建RESTful API的实践指南
|
2月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
34 0
|
1月前
|
前端开发 API 网络架构
Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!
Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!
|
1月前
|
XML JSON API
通过Flask框架创建灵活的、可扩展的Web Restful API服务
通过Flask框架创建灵活的、可扩展的Web Restful API服务
|
1月前
|
缓存 监控 API
Python Web框架FastAPI——一个比Flask和Tornada更高性能的API框架
Python Web框架FastAPI——一个比Flask和Tornada更高性能的API框架
57 0
|
1月前
|
JSON API 数据格式
构建高效Python Web应用:Flask框架与RESTful API设计实践
【2月更文挑战第17天】在现代Web开发中,轻量级框架与RESTful API设计成为了提升应用性能和可维护性的关键。本文将深入探讨如何使用Python的Flask框架来构建高效的Web服务,并通过具体实例分析RESTful API的设计原则及其实现过程。我们将从基本的应用架构出发,逐步介绍如何利用Flask的灵活性进行模块化开发,并结合请求处理、数据验证以及安全性考虑,打造出一个既符合标准又易于扩展的Web应用。
642 4
|
1月前
|
数据采集 存储 监控
利用API接口进行竞品价格监控
在电子商务和零售行业,了解竞争对手的定价策略对于保持市场竞争力至关重要。随着技术的发展,通过编程接口(API)获取商品详情成为企业监控竞品价格的有效手段。本文将详细介绍如何利用API接口实现竞品价格监控的流程和策略。
|
1月前
|
存储 数据采集 监控
利用API接口进行竞品价格监控的综合指南
在竞争日益激烈的市场中,实时监控竞争对手的价格对于保持竞争优势至关重要。通过API接口自动化收集和分析竞品价格信息,企业可以迅速做出反应,调整自身的定价策略。以下是如何利用API接口进行有效的竞品价格监控的详细步骤:
|
1月前
|
存储 PHP 数据库
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问