Windows Azure存储版本升级到> 4会导致“远程服务器返回错误:(400)错误请求.”

我通过nuget包管理器升级到4.0.1.0后开始体验这一点.然后我升级到4.1.0.0希望它可能是一个bug,但仍然是同样的问题.

我使用的是基于云的azure存储,而不是模拟器.

我以前使用3.0.3.0并且它工作,并且当我切换到此版本时仍然有效.

这是整个方法(基本上将blob从一个容器复制到另一个容器)

public string copyBlobs(string blobPath)
    {
        var storageAccount = new CloudStorageAccount(new StorageCredentials(_storageAccountName,_storageAccountKey),true);
        var cloudBlobClient = storageAccount.CreateCloudBlobClient();
        var destContainer = cloudBlobClient.GetContainerReference(cloudBlobClient.BaseUri + _publishBlobContainer);

        destContainer.CreateIfNotExists();
        BlobContainerPermissions containerPermissions = new BlobContainerPermissions(); 
        containerPermissions.PublicAccess = BlobContainerPublicAccesstype.Blob; 
        destContainer.SetPermissions(containerPermissions);  
        var src = GetSasUrl(blobPath);
        CloudBlockBlob srcBlob = new CloudBlockBlob(new Uri(src));
        CloudBlockBlob destBlob;
        destBlob = destContainer.GetBlockBlobReference(srcBlob.Name); 
        destBlob.StartcopyFromBlob(srcBlob);
        return destBlob.StorageUri.PrimaryUri.ToString();
    }

这就是抛出异常的地方:

destContainer.CreateIfNotExists();

更新:
当我调用上面的方法时,fiddler会记录.

请求:

HEAD       
https://accountname.blob.core.windows.net/https://accountname.blob.core.windows.net/published-clips?restype=container HTTP/1.1
User-Agent: WA-Storage/4.1.0 (.NET CLR 4.0.30319.34014; Win32NT 6.2.9200.0)
x-ms-version: 2014-02-14
x-ms-client-request-id: b60edc19-7d8f-4d6b-b264-0c98b9cb157d
x-ms-date: Thu,26 Jun 2014 12:43:29 GMT
Authorization: SharedKey accountname:key
Host: accountname.blob.core.windows.net
Connection: Keep-Alive

响应:

HTTP/1.1 400 The requested URI does not represent any resource on the server.
transfer-encoding: chunked
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: 85015e32-fdcf-4398-af23-83ddf8a27c1b
Access-Control-Expose-Headers: x-ms-request-id
Access-Control-Allow-Origin: *
Date: Thu,26 Jun 2014 12:43:31 GMT

解决方法

请更改以下代码行:

var destContainer = cloudBlobClient.GetContainerReference(cloudBlobClient.BaseUri + _publishBlobContainer);

var destContainer = cloudBlobClient.GetContainerReference(_publishBlobContainer);

这应该解决问题.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...