【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录

摘要:
下面对前者类型做示例。

filter的介绍

filter在Web API中经常会用到,主要用于记录日志,安全验证,全局错误处理等;Web API提供两种过滤器的基本类型:actionfilterattribute,exceptionfilterattribute;两个类都是抽象类,actionfilter主要实现执行请求方法体之前(覆盖基类方法OnActionExecuting),和之后的事件处理(覆盖基类方法OnActionExecuted);exceptionfilter主要实现触发异常方法(覆盖基类方法OnException)。下面对前者类型做示例。

新建ActionFilter类

打印参数、返回值、以及接口响应时间:

复制代码
 public class ActionFilter : ActionFilterAttribute
    {
        private const string Key = "action";
        private bool _IsDebugLog = true;
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            if (_IsDebugLog)
            {
                Stopwatch stopWatch = new Stopwatch();
                actionContext.Request.Properties[Key] = stopWatch;
                string actionName = actionContext.ActionDescriptor.ActionName;
                Debug.Print(Newtonsoft.Json.JsonConvert.SerializeObject(actionContext.ActionArguments));
                stopWatch.Start();
            }
        }
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            if (_IsDebugLog)
            {
                Stopwatch stopWatch = actionExecutedContext.Request.Properties[Key] as Stopwatch;
                if (stopWatch != null)
                {
                    stopWatch.Stop();
                    string actionName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName;
                    string controllerName = actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName;
                    Debug.Print(actionExecutedContext.Response.Content.ReadAsStringAsync().Result);
                    Debug.Print(string.Format(@"[{0}/{1} 用时 {2}ms]", controllerName, actionName, stopWatch.Elapsed.TotalMilliseconds));
                }
            }
        }
    }
复制代码

在接口的action方法上添加过滤器

[ActionFilter]

【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录第3张

或者将过滤器添加到配置中,这样将相当于在每个接口上添加了过滤器

【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录第4张

演示

发送请求:

【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录第5张

接口响应:

【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录第6张

免责声明:文章转载自《【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#中实现计时器功能(定时任务和计时多长时间后执行某方法)win10 + vs2017 + vcpkg —— VC++ 打包工具下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Quartz.Net系列(五):Quartz五大构件Job之JobBuilder解析

 所有方法图: 1.Create,OfType  在JobBuilder中有五种方法执行Action: var job1 = JobBuilder.Create().OfType<FirstJob>().Build(); var job2 = JobBuilder.Create<Firs...

IDEA+SpringBoot整合Swagger2创建API文档

------------恢复内容开始------------ 1.创建SpringBoot项目 2.选择快捷方式创建springboot项目          3.工程文件树形图  4.pom.xml中导入Swagger依赖  代码如下: 1 <dependency> 2 <groupId&...

Swift 自定义Useragent

Swift 自定义Useragent 背景 最近在接阿里云的WAF,防火墙会拦截某些请求。被拦截的请求是看不到Headers信息的,只能看到Useragent,所以,应后台需求,自定义Useragent,这样可以更方便从服务器日志定位问题。 准备 当前项目中使用的是Alamofire进行网络请求。 通过查看源码发现,默认的SessionManager是初始...

aspose授权亲测可用配套代码

支持excel,word,ppt,pdf using Aspose.Cells; using Aspose.Words.Saving; using ESBasic; using OMCS.Engine.WhiteBoard; using System; using System.Collections.Generic; using System.Drawi...

Scala从入门到精通之四-映射和元组

在Scala中映射之键值对的集合,元组是n个对象的聚集,但是对象的类型不一定相同 本节内容要点   Scala中映射的创建,遍历和查询   如何从可变和不可变映射中做出选择   Scala映射和Java映射见的互操作   Scala中元组的使用 一.构造映射 我们可以这样来构造一个映射: val scores = Map("ysl"->100,"...

函数对象与仿函数(function object and functor)

part 1. 仿函数在STL组件中的关系   如下图:   # 仿函数配合算法完成不同的策略变化。   # 适配器套接仿函数。 part 2. 仿函数介绍   传递给算法的“函数型实参”不一定得是函数,可以是行为类似函数的对象。这种对象称为函数对象(function object),或称为仿函数(functor)。——《STL标准库(第2版)》 P23...