码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2018-05-02 16:01:35      阅读:459      评论:0      收藏:0      [点我收藏+]

标签:方法   示例   新建   json.js   debug   配置   alt   lap   newton   

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 添加过滤器,实现对请求参数和响应内容的日志记录

标签:方法   示例   新建   json.js   debug   配置   alt   lap   newton   

原文地址:https://www.cnblogs.com/webenh/p/8979490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!