接口自定义代理V1—异常捕获、参数验证、日志记录

场景:很多时候接口的执行,我们在完成方法执行的本身,需要做额外的一些日志记录、异常捕获、参数验证等。

封装端代码:

/// 
        /// 代理执行
        /// 
        /// 请求参数类型
        /// 返回参数类型
        /// 执行都方法
        /// 请求参数
        /// 
        protected ResultMessage ProxyExecute(Func> func, T request)
        {
            var result = Activator.CreateInstance>();
            var logStr = new StringBuilder();
            try
            {
                logStr.AppendFormat("请求参数:{0}", JsonConvert.SerializeObject(request)); // 记录请求日志

                //参数验证
                request = ValidateHelper.ValidateParameter(request);

                //方法执行
                result = func(request);

                logStr.AppendFormat("返回参数:{0}", JsonConvert.SerializeObject(result)); // 记录返回日志
            }
            catch (Exception ex)
            {
                result.ResultCode = ResultCode.Exception;
                result.ResultMsg = ex.Message;

                logStr.AppendFormat("异常信息:{0}", ex.Message); // 记录异常日志
            }
            finally
            {
                //记录日志
                //WriteLog(logStr.ToString();) 
            }
            return result;
        }

调用端代码:

 /// 
        /// 获取用户姓名
        /// 
        /// 
        /// 
        [HttpPost]
        public ResultMessage GetStudent(FindStudentRequest request)
        {
            return ProxyExecute(StuService.GetStudent, request);
        }

项目源码:https://pan.baidu.com/s/1BXCpcZy9Ew3cvGkIwqhW2Q    yg0a

当前代理封装其实为乞丐版,其实里面可以无限扩充,例如请求里面的用户权限验证、加密、解密、并发控制等,详情见接口自定义代理V2

你可能感兴趣的:(代理方法,自定义代理,面向切面,委托的运用,泛型的运用,浅谈.net,WebApi)