接口自定义代理V2—用户权限验证、加密、解密

基于接口自定义代理V1做了升级,加入了用户权限验证、加密、解密

封装端代码:

 /// <summary>
    /// 接口基类(升级版)
    /// </summary>
    public class BaseApiController : ApiController
    {
        #region 代理执行

        /// <summary>
        /// 代理执行
        /// </summary>
        /// <typeparam name="T">请求参数类型</typeparam>
        /// <typeparam name="R">返回参数类型</typeparam>
        /// <param name="func">执行都方法</param>
        /// <param name="request">请求参数</param>
        /// <returns></returns>
        protected ResultMessage<R> ProxyExecute<T, R>(Func<T, ResultMessage<R>> func, T request)
        {
            var result = Activator.CreateInstance<ResultMessage<R>>();
            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 = ResultCodeEnum.Exception.GetHashCode();
                result.ResultMsg = ex.Message;

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

        #endregion

        #region 代理执行带权限验证

        /// <summary>
        /// 代理执行带权限验证
        /// </summary>
        /// <typeparam name="T">请求参数类型</typeparam>
        /// <typeparam name="R">返回参数类型</typeparam>
        /// <param name="func">执行都方法</param>
        /// <param name="request">请求参数</param>
        /// <returns></returns>
        protected ResultMessage<R> ProxyExecuteWithAuth<T, R>(Func<T, ResultMessage<R>> func, T request)
            where T : BaseRequest
        {
            var result = Activator.CreateInstance<ResultMessage<R>>();
            var logStr = new StringBuilder();
            try
            {
                logStr.AppendFormat("请求参数:{0}", JsonConvert.SerializeObject(request)); // 记录请求日志

                //参数验证
                request.LoginId = AuthService.Validate(request);

                //方法执行
                result = ProxyExecute(func, request);
            }
            catch (Exception ex)
            {
                result.ResultCode = ResultCodeEnum.Exception.GetHashCode();
                result.ResultMsg = ex.Message;

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

        #endregion

        #region 代理执行--请求参数需要解密执行

        /// <summary>
        /// 代理执行--请求参数需要解密执行
        /// </summary>
        /// <typeparam name="T">请求参数类型</typeparam>
        /// <typeparam name="R">返回参数类型</typeparam>
        /// <param name="func">执行都方法</param>
        /// <param name="request">请求参数</param>
        /// <returns></returns>
        protected ResultMessage<R> ProxyExecuteWithDecrypt<T, R>(Func<T, ResultMessage<R>> func, DecryptRequest request)
          where T : BaseRequest
        {
            var result = Activator.CreateInstance<ResultMessage<R>>();
            var logStr = new StringBuilder();
            try
            {
                logStr.AppendFormat("请求参数:{0}", JsonConvert.SerializeObject(request)); // 记录请求日志

                var requestData = EncryptToObject.DPAESDecrypt(request.Data);
                var req = JsonConvert.DeserializeObject<T>(requestData);

                //方法执行
                result = ProxyExecuteWithAuth(func, req);
            }
            catch (Exception ex)
            {
                result.ResultCode = ResultCodeEnum.Exception.GetHashCode();
                result.ResultMsg = ex.Message;

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

            return result;
        }

        #endregion

        #region 代理执行--返回结果加密

        /// <summary>
        /// 代理执行--返回结果加密
        /// </summary>
        /// <typeparam name="T">请求参数类型</typeparam>
        /// <typeparam name="R">返回参数类型</typeparam>
        /// <param name="func">执行都方法</param>
        /// <param name="request">请求参数</param>
        /// <returns></returns>
        protected EncryptResponse ProxyExecuteForEncrypt<T, R>(Func<T, ResultMessage<R>> func, T request)
            where T : BaseRequest
        {
            var result = new EncryptResponse();
            var logStr = new StringBuilder();
            var myResult = Activator.CreateInstance<ResultMessage<R>>();
            try
            {
                myResult = ProxyExecuteWithAuth(func, request);
            }
            catch (Exception ex)
            {
                myResult.ResultCode = ResultCodeEnum.Exception.GetHashCode();
                myResult.ResultMsg = ex.Message;

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

        #endregion
    }

调用端代码:

/// <summary>
    /// 接口案例
    /// </summary>
    public class DemoController : BaseApiController
    {
        private StudentService StuService => new StudentService();

        /// <summary>
        /// 获取用户姓名(普通执行)
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public ResultMessage<StudentEntity> GetStudent(FindStudentRequest request)
        {
            return ProxyExecute(StuService.GetStudent, request);
        }

        /// <summary>
        /// 获取用户姓名(需要权限认证)
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public ResultMessage<StudentEntity> GetStudentByAuth(FindStudentRequest request)
        {
            return ProxyExecuteWithAuth(StuService.GetStudent, request);
        }

        /// <summary>
        /// 获取用户姓名(请求加密)
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public ResultMessage<StudentEntity> GetStudentWithDecrypt(DecryptRequest request)
        {
            return ProxyExecuteWithDecrypt<FindStudentRequest, StudentEntity> (StuService.GetStudent, request);
        }
        
        /// <summary>
        /// 获取用户姓名(返回加密)
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public EncryptResponse GetStudentForEncrypt(FindStudentRequest request)
        {
            return ProxyExecuteForEncrypt(StuService.GetStudent, request);
        }
    }

项目源码:https://pan.baidu.com/s/1por-yp0ABInZRe8B67c4pQ    q9th

当前代理封装其实为升级版,里面加入了用户权限验证、加密、解密等,里面可以继续加入并发控制等,详情见接口自定义代理V3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值