.net ActionFilterAttribute 统一校验外部api签名 md5生成签名

  1. 利用ActionFilterAttribute解析外部接受数据,并验签
/// <summary>
    /// 外部api请求时,进行签名校验
    /// </summary>
    public class ExterApiFilter : ActionFilterAttribute
    {
        string token = "abc@#";

        /// <summary>
        /// 进入系统,对外部请求的进行验签操作
        /// 1、除签名外字段按ASCII码从小到大排序
        /// 2、最后连接私有的token
        /// 3、按key=value形式拼接
        /// 4、签名校验
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            try
            {
                //入参解析
                var paras = filterContext.ActionParameters;
                var i = filterContext.ActionDescriptor.GetParameters();
                Dictionary<string, object> inParamDics = new Dictionary<string, object>();//入参集合
                foreach (var item in i)
                {
                    var itemType = item.ParameterType;
                    if (itemType.IsClass && !itemType.Name.Equals("String", System.StringComparison.OrdinalIgnoreCase))//类
                    {
                        GetPropertyDic(inParamDics, itemType.GetProperties(), filterContext.ActionParameters[item.ParameterName]);
                    }
                    else
                    {
                        if (!inParamDics.ContainsKey(item.ParameterName)) inParamDics.Add(item.ParameterName, filterContext.Controller.ValueProvider.GetValue(item.ParameterName).AttemptedValue);
                    }
                }

                Dictionary<string, string> inParam = new Dictionary<string, string>();
                string sign = string.Empty;
                #region 解析数据
                if (inParamDics.Keys.Contains("sign"))
                {
                    sign = inParamDics["sign"]?.ToString();
                }
                inParam = inParamDics.Where(x => !string.IsNullOrEmpty(x.Value?.ToString())).ToDictionary(k => k.Key, k => k.Value?.ToString());

                if (inParam.ContainsKey("sign")) inParam.Remove("sign");

                var signScret = new Dictionary<string, string>() { ["token"] &#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值