zoukankan      html  css  js  c++  java
  • 【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]

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

    演示

    发送请求:

    接口响应:

     
     
  • 相关阅读:
    windows2003 iis 配置 php
    ORA16038的解决(日志无法归档)
    ORACLE表连接方式分析及常见用法
    (轉)如何计算Oracle内存中的几个命中率
    SQL調整
    婚后
    Automating Database Startup and Shutdown(开机启动和关闭oracle)
    oracle自动启动与停止
    backgroup process
    改变日期的输出格式(nls_date_format)
  • 原文地址:https://www.cnblogs.com/webenh/p/8979490.html
Copyright © 2011-2022 走看看