Azure禁止使用blob,但是获取blob可以使用api

时间:2018-05-11 07:01:24

标签: c# rest azure httprequest azure-storage-blobs

我想使用HttResquestMessage将文本文件放到blob容器中,我得到403错误(Forbidden)。 我知道这是一个着名的问题,并且有很多答案,但我已经搜索了很多,在我的案例中找不到问题。 这是我的签名

PUT\n
\n
\n
11\n
\n
\n
\n
\n
\n
\n
\n
\n
x-ms-blob-type:BlockBlob\n
x-ms-date:Thu, 10 May 2018 16:00:21 GMT\n
x-ms-version:2017-07-29\n
/MyStorage/dbstore/myFolder/test2.txt"

这是由SHA256Base64编码

生成的授权
SharedKey MyStorage:Oy8nB79/KVROzxYCYSF71djhIwYEYS36tgRqyxe6sXY=

此授权适用于GET请求我试图获取所有容器名称并且成功。

我的HttpRequestMessage看起来像

{Method: PUT, RequestUri:             
'http://MyStorage.blob.core.windows.net/dbstore/            
myFolder/test2.txt', Version: 1.1, Content: 
System.Net.Http.ByteArrayContent, Headers:
{
  x-ms-date: Fri, 11 May 2018 06:39:35 GMT
  x-ms-version: 2017-07-29
  Authorization: SharedKey     
storagekaren:Oy8nB79/KVROzxYCYSF71djhIwYEYS36tgRqyxe6sXY=
  Content-Length: 11
  Content-MD5: CAQ66JnJH0H9GhrLTy+b1w==
}}
    Content: {System.Net.Http.ByteArrayContent}
    Headers: {x-ms-date: Fri, 11 May 2018 06:39:35 GMT
x-ms-version: 2017-07-29
Authorization: SharedKey     
storagekaren:Oy8nB79/KVROzxYCYSF71djhIwYEYS36tgRqyxe6sXY=
}
    Method: {PUT}
    Properties: Count = 0
    RequestUri: {http://MyStorage.blob.core.windows.net/dbstore/myFolder/test2.txt}
    Version: {1.1}

我在请求中遗漏了什么?

1 个答案:

答案 0 :(得分:1)

放入blob时需要添加两个参数

  • x-ms-blob-type必须包含在HttpRequestMessage标头中。
  • Content-MD5是可选的,但是如果您在请求标头中添加它,它也应该包含在StringToSign中,即您提到的签名。

还有任何问题,请问。