200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > api服务器 响应时间 记录ASP.NET Web API 服务接口响应时间

api服务器 响应时间 记录ASP.NET Web API 服务接口响应时间

时间:2018-10-19 11:41:02

相关推荐

api服务器 响应时间 记录ASP.NET Web API 服务接口响应时间

实现起来很简单,一个Filter就可以搞定!!!

///

/// 监控接口执行时间

///

public class TimingActionFilter : ActionFilterAttribute

{

private static readonly Logger logger = LogManager.GetCurrentClassLogger();

private const string Key = "__action_duration__";

///

/// 启用计时器

///

///

///

///

public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)

{

/*

await Trace.WriteAsync("Executing action named {0} for request {1}.",

actionContext.ActionDescriptor.ActionName,actionContext.Request.GetCorrelationId());

*/

if (SkipLogging(actionContext))

{

return base.OnActionExecutingAsync(actionContext, cancellationToken);

}

var stopWatch = new Stopwatch();

actionContext.Request.Properties[Key] = stopWatch;

stopWatch.Start();

return base.OnActionExecutingAsync(actionContext, cancellationToken);

}

///

/// 记录监控接口执行日志

///

///

///

///

public override Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)

{

if (!actionExecutedContext.Request.Properties.ContainsKey(Key))

{

return base.OnActionExecutedAsync(actionExecutedContext, cancellationToken);

}

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;

string log = string.Format("[execution controller:{0} - action:{1} take {2} time.]", controllerName, actionName, stopWatch.Elapsed);

#if DEBUG

Debug.Print(log);

#endif

logger.Info(log);

}

return base.OnActionExecutedAsync(actionExecutedContext, cancellationToken);

}

private static bool SkipLogging(HttpActionContext actionContext)

{

return actionContext.ActionDescriptor.GetCustomAttributes().Any() || actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes().Any();

}

}

///

/// 不记录监控接口执行日志

///

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true)]

public class NoLogAttribute : Attribute

{

}

WebApiConfig中启用

public static void Register(HttpConfiguration config)

{

//启用监控接口执行时间

//config.Filters.Add(new TimingActionFilter());

//启用全局验证

config.Filters.Add(new ModelValidFilter());

//启用特性路由

config.MapHttpAttributeRoutes();

//默认路由

config.Routes.MapHttpRoute(

name: "DefaultApi",

routeTemplate: "api/{controller}/{id}",

defaults: new { id = RouteParameter.Optional }

);

}

配置NLog记录响应时间超过1秒的接口服务

使用HttpClient对ASP.NET Web API服务实现增删改查

本篇体验使用HttpClient对 Web API服务实现增删改查. 创建 Web API项目 新建项目,选择" MVC 4 Web应用程序&quo ...

使用HttpClient消费ASP.NET Web API服务

本篇体验使用HttpClient消费 Web API服务,例子比较简单. 依次点击"文件","新建","项目". 选择&quo ...

ASP.NET Web Api 2 接口API文档美化之Swagger

使用第三方提供的swgger ui 可有效提高 web api 接口列表的阅读性,并且可以在页面中测试服务接口. 但本人在查阅大量资料并进行编码测试后,发现大部分的swagger实例并不能有效运行.例 ...

ASP.NET Web API编程——接口安全与角色控制

1 API接口验证与授权 JWT JWT定义,它包含三部分:header,payload,signature:每一部分都是使用Base64编码的JSON字符串.之间以句号分隔.signature是”h ...

asp.net web api 的版本升级到 2.2的记录

web api 的版本 升级到 2.2的记录 web api 2.2相比1.0提升了不少 而且其中最重要的就是有了在线文档的自动字段注释的功能 再也不用写详细的字段说明 ...

ASP.NET Web API——选择Web API还是WCF

WCF是.NET平台服务开发的一站式框架,那么为什么还要有 Web API呢?简单来说, Web API的设计和构建只考虑了一件事情,那就是HTTP,而WCF的设计主要是考 ...

基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD)

一些小的C/S项目(winform.WPF等),因需要访问操作数据库,但又不能把DB连接配置在客户端上,原因有很多,可能是DB连接无法直接访问,或客户端不想安装各种DB访问组件,或DB连接不想暴露在客 ...

Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

在这篇文章中 概观 演习 概要 由网络营 下载网络营训练包 在传统的Web应用程序中,客户机(浏览器)通过请求页面启动与服务器的通信.然后,服务器处理请求,并将页面的HTML发送给客户端.在与页面的后 ...

随机推荐

我认识的log4j开源日志

Log4j 在java中如何配置log4j!! 步骤: ①引入jar包,推荐新建一个lib文件夹,用来装所有的jar包(还要进行下图内的操作) 之后项目中就会多出一个引入外部Library的项目 ②创 ...

sersync

一.准备 1.目标:从192.168.0.1上把/app/web//data下文件同步到192.168.0.2下的/app/web/cnblogs-/data: ...

建立开发板与PC机之间的nfs服务器

ARM开发板与PC通过NFS 网络文件系统挂接,很方便文件的移动,也为我们的开发带来了方便.接下来,我就详细的介绍下如何建立ARM与PC机的挂接. 我是用的UBuntu系统. 首先,我们需要在主机上安 ...

XidianOJ 1096 数的拆分

题目描述 输入自然数n,然后将其拆分成由若干数相加的形式,参与加法运算的数可以重复. 输入 多组数据.每组只有一个整数n,表示待拆分的自然数n. n<=80 输出 每组一个数,即所有方案数. - ...

关于SpringAOP的XML方式的配置

AOP(XML)[理解][应用][重点] 1.AOP基础实例 A.导入jar包 核心包(4个) 日志(2个) AOP(4个) Spring进行AOP开发(1个) ...

Java---文件夹及文件操作

/** * 获取文件夹大小 * @param file File实例 * @return long */ public static long getFolderSize(java.io.File f ...

Nginx之旅系列 - Nginx的configuration

题记:Nginx之旅系列是用来记录Nginx从使用到源码学习的点点滴滴,分享学习Nginx的快乐 Nginx 首页:/ Nginx的configuration 今天对 ...

ng2响应式表单-翻译与概括官网REACTIVE FORMS页面

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。