日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

通用 HTTP 簽名組件的另類實(shí)現(xiàn)方式

瀏覽:378日期:2022-06-08 16:47:17
目錄
  • 1、初衷
  • 2、思路
  • 3、直接看效果
  • 4、代碼實(shí)現(xiàn)
    • HttpSignItem類
    • HttpSignSetting類
    • HttpSigner類
  • 5、附上倉庫地址

    1、初衷

    開發(fā)中經(jīng)常需要做一些接口的簽名生成和校驗(yàn)工作,最開始的時(shí)候都是每個(gè)接口去按照約定單獨(dú)實(shí)現(xiàn),久而久之就變的非常難維護(hù),因此就琢磨怎么能夠?qū)懥艘粋€(gè)比較通用的簽名生成工具。

    2、思路

    采用鏈?zhǔn)秸{(diào)用的方式,使得簽名的步驟可以動態(tài)拼湊組合。

    3、直接看效果

      //設(shè)置數(shù)據(jù)源
        var signSource = new Dictionary<string, string>()
        {
    { "param1", "1" },
    { "param3", "3+" },
    { "param2", "2" }
        };
        var signer = new HttpSigner();
        signer.SetSignData(signSource);
     
        //設(shè)置數(shù)據(jù)源并配置規(guī)則
        signer.SetSignData(signSource, setting =>
        {
    //按參數(shù)名排序
    //result --> param1 param2 param3
    setting.IsOrderByWithKey = false;
     
    //是否對簽名數(shù)據(jù)的參數(shù)值進(jìn)行UrlEncode
    setting.IsDoUrlEncodeForSourceValue = false;
     
    //簽名主體是否包含參數(shù)名
    setting.IsSignTextContainKey = true;
    //簽名主體中參數(shù)和參數(shù)值的連接符(需要啟用IsSignTextContainKey)
    setting.SignTextKeyValueSeparator = "=";
    //簽名主體中不同參數(shù)項(xiàng)的連接符
    setting.SignTextItemSeparator = "&";
    //以上都開啟后  --> param1=1&param2=2&param3=3
     
    //編碼
    setting.DefaultEncoding = Encoding.UTF8;
        });
     
        //簽名主體設(shè)置前綴
        signer.SetSignData(signSource).SetSignTextPrefix("TestPrefix");
     
        //簽名主體設(shè)置后綴
        signer.SetSignData(signSource).SetSignTextSuffix("TestSuffix");
     
        //簽名主體進(jìn)行Base64
        signer.SetSignData(signSource).SetSignTextBase64();
     
        //簽名主體進(jìn)行MD5,(方法參數(shù)為簽名結(jié)果是否轉(zhuǎn)小寫)
        signer.SetSignData(signSource).SetSignTextMD5(bool isToLower = true);
     
        //簽名主體進(jìn)行SHA1,(方法參數(shù)為簽名結(jié)果是否轉(zhuǎn)小寫)
        signer.SetSignData(signSource).SetSignTextSHA1(bool isToLower = true);
     
        //獲取簽名結(jié)果
        string signString = signer.SetSignData(signSource).GetSignResult();
     
        //組合調(diào)用
        string signString = signer.SetSignData(signSource).SetSignTextBase64().SetSignTextMD5().SetSignTextSHA1();

    4、代碼實(shí)現(xiàn)

    HttpSignItem類

    用于保存簽名的參數(shù)集合。

    namespace JiuLing.CommonLibs.Security.HttpSign
    {
        internal class HttpSignItem
        {
    public string Key { get; set; }
    public string Value { get; set; }
     
    public HttpSignItem(string key, string value)
    {
        Key = key;
        Value = value;
    }
        }
    }

    HttpSignSetting類

    用于簽名的基本配置。

    using System.Text;
     
    namespace JiuLing.CommonLibs.Security.HttpSign
    {
        /// <summary>
        /// 簽名配置
        /// </summary>
        public class HttpSignSetting
        {
    /// <summary>
    /// 是否按參數(shù)名進(jìn)行排序
    /// </summary>
    public bool IsOrderByWithKey { get; set; } = false;
     
    /// <summary>
    /// 是否對簽名數(shù)據(jù)的參數(shù)值進(jìn)行UrlEncode
    /// </summary>
    public bool IsDoUrlEncodeForSourceValue { get; set; } = false;
     
    /// <summary>
    /// 簽名主體是否包含參數(shù)名
    /// </summary>
    public bool IsSignTextContainKey { get; set; } = true;
     
    /// <summary>
    /// 簽名主體中參數(shù)和參數(shù)值的連接符(需要啟用IsSignTextContainKey)
    /// </summary>
    public string SignTextKeyValueSeparator { get; set; } = "=";
     
    /// <summary>
    /// 簽名主體中不同參數(shù)項(xiàng)的連接符
    /// </summary>
    public string SignTextItemSeparator { get; set; } = "&";
     
    /// <summary>
    /// 編碼
    /// </summary>
    public Encoding DefaultEncoding { get; set; } = Encoding.UTF8;
        }
    }

    HttpSigner類

    簽名組件的具體實(shí)現(xiàn)。

    using System;
    using System.Collections.Generic;
    using System.Linq;
     
    namespace JiuLing.CommonLibs.Security.HttpSign
    {
        /// <summary>
        /// 網(wǎng)絡(luò)請求簽名工具
        /// </summary>
        public class HttpSigner
        {
    /// <summary>
    /// 簽名配置
    /// </summary>
    private readonly HttpSignSetting _setting = new HttpSignSetting();
    /// <summary>
    /// 最終的簽名串
    /// </summary>
    private string _signString;
     
    /// <summary>
    /// 設(shè)置簽名數(shù)據(jù)
    /// </summary>
    /// <param name="signSource">待簽名的鍵值對</param>
    /// <param name="setting">配置簽名規(guī)則</param>
    /// <returns></returns>
    /// <exception cref="ArgumentException"></exception>
    public HttpSigner SetSignData(Dictionary<string, string> signSource, Action<HttpSignSetting> setting = null)
    {
        setting?.Invoke(_setting);
        if (_setting == null)
        {
    throw new ArgumentNullException("無效的簽名配置", "setting");
        }
     
        if (signSource == null || signSource.Count == 0)
        {
    throw new ArgumentException("待簽名數(shù)據(jù)異常", nameof(signSource));
        }
     
        var signSourceList = new List<HttpSignItem>(signSource.Count);
        foreach (var item in signSource)
        {
    var itemValue = item.Value;
    if (_setting.IsDoUrlEncodeForSourceValue)
    {
        itemValue = System.Web.HttpUtility.UrlEncode(itemValue, _setting.DefaultEncoding);
    }
    signSourceList.Add(new HttpSignItem(item.Key, itemValue));
        }
     
        if (_setting.IsOrderByWithKey)
        {
    signSourceList = signSourceList.OrderBy(x => x.Key).ToList();
        }
     
        if (_setting.IsSignTextContainKey)
        {
    _signString = string.Join(_setting.SignTextItemSeparator, signSourceList.Select(x => $"{x.Key}{_setting.SignTextKeyValueSeparator}{x.Value}"));
        }
        else
        {
    _signString = string.Join(_setting.SignTextItemSeparator, signSourceList.Select(x => x.Value));
        }
     
        return this;
    }
     
    /// <summary>
    /// 簽名主體設(shè)置前綴
    /// </summary>
    /// <param name="input">前綴值</param>
    /// <returns></returns>
    public HttpSigner SetSignTextPrefix(string input)
    {
        _signString = $"{input}{_signString}";
        return this;
    }
     
    /// <summary>
    /// 簽名主體設(shè)置后綴
    /// </summary>
    /// <param name="input">后綴值</param>
    /// <returns></returns>
    public HttpSigner SetSignTextSuffix(string input)
    {
        _signString = $"{_signString}{input}";
        return this;
    }
     
    /// <summary>
    /// 簽名主體設(shè)置后綴
    /// </summary>
    /// <returns></returns>
    public HttpSigner SetUrlEncode()
    {
        _signString = System.Web.HttpUtility.UrlEncode(_signString, _setting.DefaultEncoding);
        return this;
    }
     
    /// <summary>
    /// 簽名主體進(jìn)行Base64
    /// </summary>
    /// <returns></returns>
    public HttpSigner SetSignTextBase64()
    {
        _signString = Base64Utils.GetStringValue(_signString);
        return this;
    }
     
    /// <summary>
    /// 簽名主體進(jìn)行MD5
    /// </summary>
    /// <param name="isToLower">簽名結(jié)果是否轉(zhuǎn)小寫</param>
    /// <returns></returns>
    public HttpSigner SetSignTextMD5(bool isToLower = true)
    {
        if (isToLower)
        {
    _signString = MD5Utils.GetStringValueToLower(_signString);
        }
        else
        {
    _signString = MD5Utils.GetStringValueToUpper(_signString);
        }
        return this;
    }
     
    /// <summary>
    /// 簽名主體進(jìn)行SHA1
    /// </summary>
    /// <param name="isToLower">簽名結(jié)果是否轉(zhuǎn)小寫</param>
    /// <returns></returns>
    public HttpSigner SetSignTextSHA1(bool isToLower = true)
    {
        if (isToLower)
        {
    _signString = SHA1Utils.GetStringValueToLower(_signString);
        }
        else
        {
    _signString = SHA1Utils.GetStringValueToUpper(_signString);
        }
        return this;
    }
     
    /// <summary>
    /// 獲取簽名結(jié)果
    /// </summary>
    /// <returns></returns>
    public string GetSignResult()
    {
        return _signString;
    }
        }
    }
    

    5、附上倉庫地址

    以上代碼包含在我的通用類庫中,可以直接Nuget搜索JiuLing.CommonLibs安裝。
    GitHub類庫地址
    文章代碼地址

    到此這篇關(guān)于通用 HTTP 簽名組件的另類實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)HTTP 簽名組件內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

    標(biāo)簽: ASP.NET
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    色综合www| 视频一区二区不卡| 国产欧美一区二区三区精品观看 | 好吊一区二区三区| 亚洲国产影院| 日韩深夜视频| 亚洲成人不卡| 99精品美女| 1024精品久久久久久久久| 91久久国产| 鲁大师成人一区二区三区 | 久久尤物视频| 国产不卡精品| 精品成人免费一区二区在线播放| 99tv成人| 蜜臀va亚洲va欧美va天堂| 婷婷亚洲精品| 国产精品观看| 精品美女久久| 99久久激情| 久久国产精品亚洲77777| 日韩欧美高清一区二区三区| 国产日产一区| yellow在线观看网址| 欧美精品一区二区久久| 免费观看在线色综合| 日韩福利视频一区| 精品国产乱码久久久久久樱花 | 国产69精品久久| 999久久久91| 中文字幕日韩高清在线 | 国产精品videossex久久发布| 精品入口麻豆88视频| 亚洲国产专区| 热久久久久久| 欧美精选视频一区二区| 免费精品视频在线| 欧美国产不卡| 激情久久久久久| 四虎精品一区二区免费| 国产一区丝袜| 久久国产高清| 精品免费在线| 久久国产精品毛片| 久久亚洲人体| 国产综合精品| 国产精品探花在线观看| 婷婷成人在线| 国产人成精品一区二区三| 91精品蜜臀一区二区三区在线| 日本成人在线视频网站| 色在线中文字幕| 一区二区亚洲视频| 日本黄色精品| 丝袜诱惑制服诱惑色一区在线观看 | 日本国产精品| 五月激激激综合网色播| 麻豆mv在线观看| 婷婷视频一区二区三区| 日韩高清欧美| 国产探花一区在线观看| 激情久久久久久| 欧美精品97| 美日韩精品视频| а√天堂8资源在线| 日本不卡一区二区三区| 日韩中文在线电影| 日本va欧美va精品发布| 99视频精品全部免费在线视频| 日韩精品视频网| 久久精品青草| 欧美激情麻豆| 亚州av一区| 亚洲激情精品| 日韩中文在线电影| 麻豆成人91精品二区三区| 水野朝阳av一区二区三区| 日韩国产一区二区三区| 国产精品久久久久久久免费软件| 免费久久99精品国产自在现线| 国产色播av在线| 国产精品成人自拍| 亚洲深深色噜噜狠狠爱网站| 久久国产直播| 久久久久亚洲精品中文字幕| 日韩在线视频一区二区三区| 欧美日韩精品一本二本三本| 色爱综合网欧美| 麻豆精品久久久| 日韩精品视频网| 麻豆9191精品国产| 久久久久91| 98精品视频| 久久精品国产亚洲aⅴ| 国产调教精品| 日本不卡视频一二三区| 先锋影音久久久| 狠狠久久婷婷| 蜜臀91精品国产高清在线观看| 日本久久黄色| 国产精品多人| 国产精品久av福利在线观看| 91精品一区| 青草av.久久免费一区| 亚洲欧洲美洲国产香蕉| 蜜桃视频一区二区| 香蕉精品999视频一区二区| 久久精品导航| 亚洲www免费| 欧美gv在线| 日韩不卡视频在线观看| 欧美sm一区| 91精品国产成人观看| 高清av一区二区三区| 日韩中文欧美| 吉吉日韩欧美| 中文字幕高清在线播放| 日韩成人a**站| 黄色aa久久| 另类中文字幕国产精品| 91精品一区国产高清在线gif| 国产综合激情| 国产精品美女久久久| 国产视频一区在线观看一区免费| 99香蕉国产精品偷在线观看 | 日韩在线观看| 国产成人精品一区二区三区在线| 精品一区91| 国产一区二区三区久久久久久久久| 欧美国产日本| 国产一区二区三区日韩精品| 日韩欧美网址| 美女久久久久| 视频一区在线播放| 日韩欧美精品一区二区综合视频| 91成人精品观看| 国产精品久久777777毛茸茸| 精品国产黄a∨片高清在线| 国产成人精品亚洲日本在线观看| 99精品视频精品精品视频| av不卡在线看| 日韩精品一级二级 | 欧美日本久久| 免费亚洲婷婷| 精品黄色一级片| 免费观看亚洲| 中文亚洲欧美| 国产日韩欧美在线播放不卡| 日本一区二区免费高清| av一区在线| 午夜一区在线| 久久国内精品| 国产中文在线播放| 国产一区91| 日本少妇一区二区| 91免费精品| 午夜在线精品偷拍| 国产欧美一区二区三区国产幕精品 | 国产女优一区| 青青伊人久久| 色在线视频观看| 国产亚洲午夜| 国产精品第一国产精品| 香蕉久久精品| 日本不卡一区二区| 国内自拍视频一区二区三区| 亚洲精品中文字幕乱码| 日韩av午夜在线观看| 亚洲三级欧美| 亚洲日韩视频| 国产精品精品国产一区二区| 一区三区视频| 国产精品毛片aⅴ一区二区三区| 久久九九精品| 欧美精品影院| 国产在线不卡| 国产亚洲观看| 欧美日韩国产一区精品一区| 国产美女视频一区二区| 亚洲特级毛片| 日韩精品一区二区三区av | 精品欠久久久中文字幕加勒比| 亚洲香蕉网站| 国产欧美日韩在线观看视频| 亚洲不卡av不卡一区二区| 色综合视频一区二区三区日韩 | 国产二区精品| 国产乱码精品一区二区三区四区| 久久久久久久久久久9不雅视频| 男女性色大片免费观看一区二区| 麻豆精品视频在线观看免费| 亚洲免费网址| sm捆绑调教国产免费网站在线观看 | 亚洲韩日在线| 国产欧美日韩视频在线| 国产综合婷婷| 精品国产欧美| 91综合久久爱com| 在线一区视频| 日韩久久精品|