赞
踩
第一步:创建一个一般处理程序,创建一个全局变量url用来接收参数化了之后的URL地址
然后在ProcessRequest(HttpContext context)函数中调用下面的函数signatureURL();
第二步:把这代码拷进去,OK直接去浏览器地址栏请求这个URL就好了
- private void signatureURL()
- {
- string HTTP_METHOD = "GET";
- IDictionary<String, String> parameterDic = new Dictionary<string, string>();
-
- // 加入请求公共参数
- parameterDic.Add("Version", "2017-03-21");
- parameterDic.Add("AccessKeyId", "*******"); //此处请替换成您自己的AccessKeyId
- parameterDic.Add("TimeStamp", "2015-05-14T09:03:45Z");//此处将时间戳固定只是测试需要,这样此示例中生成的签名值就不会变,方便您对比验证,可变时间戳的生成需要用下边这句替换
- //parameterDic.Add("TimeStamp", DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"));//2005-11-05 14:23:23Z);
- parameterDic.Add("SignatureMethod", "HMAC-SHA1");
- parameterDic.Add("SignatureVersion", "1.0");
- //parameterDic.Add("SignatureNonce", "12312312312");//此处将唯一随机数固定只是测试需要,这样此示例中生成的签名值就不会变,方便您对比验证
-
- parameterDic.Add("SignatureNonce", System.Guid.NewGuid().ToString());
- parameterDic.Add("Format", "XML");
-
-
- // 加入方法特有参数
- parameterDic.Add("Action", "GetVideoPlayAuth");
- parameterDic.Add("VideoId", "32651e8b04b04a2caceaec5452bdedce");
-
- // 对参数进行排序
- var dicSort = from objDic in parameterDic orderby objDic.Key select objDic;
-
- // 生成stringToSign字符
- string SEPARATOR = "&";
- string EQUAL = "=";
- StringBuilder stringToSign = new StringBuilder();
- stringToSign.Append(HTTP_METHOD).Append(SEPARATOR); ;
- stringToSign.Append(percentEncode("/")).Append(SEPARATOR);
-
- StringBuilder canonicalizedQueryString = new StringBuilder();
- foreach (KeyValuePair<string, string> kvp in dicSort)
- {
- // 此处需要对key和value进行编码
- canonicalizedQueryString.Append(SEPARATOR).Append(percentEncode(kvp.Key)).Append(EQUAL).Append(percentEncode(kvp.Value));
- }
-
- // 此处需要对canonicalizedQueryString进行编码
- stringToSign.Append(percentEncode(canonicalizedQueryString.ToString().Substring(1)));
-
- string str_ToSign = stringToSign.ToString();
-
- byte[] byt_key = UTF8Encoding.UTF8.GetBytes("dMQfV5GaF3EJhraSN4ZevJlMGu7J7r&");
- //byte[] byt_key = UTF8Encoding.UTF8.GetBytes("fdFww0u5zcZhcvi1X+3KJ5bN1VY=&");//请使用您自己的key和secret
-
- //将StringToSign转化为Byte数组
- byte[] byt_ToSign = UTF8Encoding.UTF8.GetBytes(str_ToSign);
-
- //设置HMAC SHA1的密钥(Access Key Secret的Byte数组)
- HMACSHA1 hmac = new HMACSHA1(byt_key);
- //进行哈希运算
- byte[] hashValue = hmac.ComputeHash(byt_ToSign);
- //进行Base64编码
- string signature = Convert.ToBase64String(hashValue);
- //对生成的签名进行URL编码(UTF8)
- signature = HttpUtility.UrlEncode(signature, Encoding.UTF8);
- //构建完整的URL
-
- string signed_url = signature;
-
- // 生成请求URL
- StringBuilder requestURL;
- requestURL = new StringBuilder("http://vod.cn-shanghai.aliyuncs.com?");
- requestURL.Append(percentEncode("Signature")).Append("=").Append(signature);
-
- foreach (var item in dicSort)
- {
- requestURL.Append("&").Append(percentEncode(item.Key)).Append("=").Append(percentEncode(item.Value));
- }
- url = requestURL.ToString();
- Console.WriteLine(requestURL.ToString());
- }
- public static string percentEncode(String value)
- {
- StringBuilder stringBuilder = new StringBuilder();
- string text = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
- byte[] bytes = Encoding.GetEncoding("UTF-8").GetBytes(value);
- foreach (char c in bytes)
- {
- if (text.IndexOf(c) >= 0)
- {
- stringBuilder.Append(c);
- }
- else
- {
- stringBuilder.Append("%").Append(
- string.Format(CultureInfo.InvariantCulture, "{0:X2}", (int)c));
- }
- }
- return stringBuilder.ToString();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。