WindowsazureRESTAPIListContainerIssues但我有一个异常“远程服务器返回错误:(403)服务器无法验证请求。确保正确形成授权标头的值,包括签名。”但我按照给出的说明包含签名,有人发现我的代码中有任何错误吗?privatestaticStringSignThis(stringStringToSign,stringKey,string帐户){字符串签名=string.Empty;byte[]unicodeKey=Convert.FromBase64String(Key);使用(HMACSHA256hmacSha256=newHMACSHA256(unicodeKey)){Byte[]dataToHmac=System.Text.Encoding.UTF8.GetBytes(StringToSign);signature=Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac));}StringauthorizationHeader=String.Format(System.Globalization.CultureInfo.InvariantCulture,"{0}{1}:{2}","SharedKey",帐号,签名);returnauthorizationHeader;}staticvoidListContainers(){Thread.CurrentThread.CurrentCulture=System.Globalization.CultureInfo.InvariantCulture;stringKey=@"MyStorageAccountKey";stringAccount=@"MyStorageAccountName";DateTimedt=DateTime.UtcNow;字符串dataStr=dt.ToString("R",System.Globalization.CultureInfo.InvariantCulture);字符串StringToSign=String.Format("GETn"+"n"//内容编码+"n"//内容语言+"n"//内容长度+"n"//内容md5+"n"//内容类型+"n"//date+"n"//如果修改自+"n"//如果匹配+"n"//如果没有匹配+"n"//如果未修改因为+"n"//范围+"x-ms-date:"+dataStr+"nx-ms-version:2014-02-14n"//headers+"/{0}ncomp:list",Account);stringauth=SignThis(StringToSign,Key,Account);字符串方法="GET";stringurlPath=string.Format("https://{0}.blob.core.windows.net/?comp=list",Account);Uriuri=newUri(urlPath);HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(uri);reque.Method=方法;reque.Headers.Add("授权",auth);reque.Headers.Add("x-ms-date",dataStr);reque.Headers.Add("x-ms-version","2014-02-14");使用(HttpWebResponseresponse=(HttpWebResponse)reque.GetResponse()){使用(StreamReaderreader=newStreamReader(response.GetResponseStream())){stringtext=reader.ReadToEnd();}}}编辑:字符串i用于生成签名GETx-ms-date:Tue,14Jul201518:38:16GMTx-ms-version:2014-02-14/MyStorageAccountName/comp:list编辑:我遇到了异常响应:AuthenticationFailedServer未能验证请求。确保授权标头的值格式正确,包括签名。RequestId:2fc74ef8-0001-0083-2664-be8850000000Time:2015-07-14T18:38:172.Z08request'5rqWNl2i8kuZF6haCRqFr1S0viOM9eLjz4L/zU6GCsg='与任何计算签名不同。服务器使用以下字符串进行签名:'GETx-ms-date:Tue,14Jul201518:38:16GMTx-ms-version:201402-14/MyStorageAccountName/comp:list'。最终编辑:完成gauvrav指定的所有更改后,我发现我使用了错误的存储密钥,更换正确的存储密钥后,它工作正常此错误可能还有其他更改:请参阅此链接请将您的StringToSign更改为:stringStringToSign=String.Format("GETn"+"n"//contentencoding+"n"//contentlanguage+"n"//contentlength+"n"//contentmd5+"n"//contenttype+"n"//date+"n"//ifmodifiedsince+"n"//ifmatch+"n"//ifnonematch+"n"//如果自+"n"//range+"x-ms-date:"+dataStr+"nx-ms-version:2014-02-14n"//headers+"/{0}/ncomp:list",Account);//注意在“{0}”之后有一个额外的“/”它在帐户名称占位符(上面代码的最后一行)之后缺少一个/。完成后,您应该能够看到以XML格式返回的容器列表。以上就是C#学习教程:WindowsazureRESTAPI列出容器问题分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
