0

使用Microsoft.WindowsAzure.Storage 2.1.0.3Azure存储复制斑点控制台应用程序 - 403 Forbidden错误

Attemping写conosle应用从一个Azure存储帐户移动文件到另一个帐户。应用程序使用sourceClient.ListContainers()列出所有容器,循环遍历foreach中的所有容器,为每个容器获取共享访问令牌,然后为每个Blob启动StartCopyFromBlob请求。目标blob具有相同的命名结构,但使用不同的帐户(例如sourceAzureUrl/testContainer/filename.ext - > destAzureUrl/testContainer/filename.ext)。

大部分文件(98%)复制都很好,但是当发送某些请求时,它会返回此异常:“远程服务器返回错误:(403)禁止。当创建CloudBlockBlob对目标blob的引用时,该URL似乎没有正确的URL转义,导致出现异常。但是,当此代码在MVC控制器内部运行时,请求以某种方式正确地被URL转义并且请求完成而没有错误。复制的blob也包含非转义名称。

看起来原因是blob/filename包含一个“[”和/或“]”字符(例如Roger_Smith [1] .doc)。如果文件名是事先进行了URL编码的,则请求完成时不会出错,但Azure存储中的文件名是其URL转义的化身,而不是原始文件名(Roger_Smith%255b1%255d.doc而不是Roger_Smith [1] .doc)。

有没有一种方法来正确的URL转义复制请求,仍然有结果blob有非转义的名称?

回答

0

你确认你正在运行.net 4.5吗?在.net 4.5中引入的与.NET 4.0(这是服务用于验证响应的内容)不兼容的字符存在uri转义问题。因此,看起来好像消息签名不正确。我们正在与.net团队长期解决此问题。与此同时,您可以考虑运行.net 4.0(安装.net 4.5以利用GC改进)或避免文件名中的括号字符。

+0

我们也遇到了+符号的问题。即使在.NET 4.0下我们也禁止403。 :( – ProVega

相关问题