WebApi接口消息中请求、反馈、日志记录的统一处理


在一个后端接口系统中,发布的接口,数据交互应该有一套统一的标准,以便调用方有一个高效、统一的处理。

而每个业务程序开发人员,可能只关心自己相对应的接口业务,而造成数据格式不同和大量的相应的日志记录操作。

所以需要一套统一的日志记录和简单统一的数据结构封装

1、在WebApi项目中添加自定义消息处理委托类:CustomMessageDelegatingHandler

 

    /// <summary>
    /// API自定义消息处理委托类。
    /// 对消息进行自定义操作、日志记录。
    /// </summary>
    public class CustomMessageDelegatingHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            //请求参数记录
            string guid = Guid.NewGuid().ToString("N");
            LogHelper.WriteLog(guid + "-[" + request.Method.Method + "]:" + request.RequestUri);
            return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>((responseToCompleteTask) =>
            {
                HttpResponseMessage response = responseToCompleteTask.Result;
                HttpError error = null;
                if (response.TryGetContentValue<HttpError>(out error))
                {
                    //添加自定义错误处理
                    //error.Message = "Your Customized Error Message";
                }

                if (error != null)
                {
                    //封装处理异常信息,返回指定JSON对象
                    WebAPIResultEntity webAPIResult = new WebAPIResultEntity()
                    {
                        status_code = "-999",
                        message = error.Message + error.ExceptionMessage
                    };
                    
                    //response.Content = new StringContent(ConversionHelper.ObjectToJson(webAPIResult), System.Text.Encoding.UTF8, "application/json");
                }
                else
                {
                    //可以将反馈的数据读取出来重新封装按照指定格式统一返回
                    var str = response.Content.ReadAsStringAsync().Result;

                    //数据封装...
                    
                    //response.Content = new StringContent(str, System.Text.Encoding.UTF8, "application/json");
                }
                //反馈参数记录
                LogHelper.WriteLog(guid + "-" + response.Content.ReadAsStringAsync().Result);

                return response;
            });
        }
    }

 

 

2、在WebApiConfig中添加注册消息类

//自定义消息类型
config.MessageHandlers.Add(new CustomMessageDelegatingHandler());

 

这样调用接口时,就可以统一记录请求参数和反馈数据、也能统一封装自己想要的数据包装格式

如:

{
    "data":{
        "result":"123"
    },
    "message":"成功",
    "code":"200"
}

{
    "data":null,
    "message":"未将对象引用到实例",
    "code":"-999"
}

 

代码中的LogHelper是自己封装的log4net日志记录框架,网上有很多集成教程

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM