/// <summary> /// The internal method to create signature. /// </summary> /// <param name="urlPath"></param> /// <param name="args"></param> /// <param name="appSecret"></param> /// <returns></returns> private static string InternalGetSignature(string urlPath, IDictionary <string, string> args, string appSecret) { string cleartext = urlPath + args.Where((item) => !string.IsNullOrWhiteSpace(item.Value)).Select((item) => item.Key + item.Value).OrderBy((item) => item, StringComparer.Ordinal).StringJoin(string.Empty); byte[] ciphertext = new HMACSHA1(Encoding.UTF8.GetBytes(appSecret)).ComputeHash(Encoding.UTF8.GetBytes(cleartext)); return(ciphertext.StringJoin(string.Empty, (item) => item.ToString("X2"))); }