在密钥中使用unicode上传的AWS S3失败了.NET 4.5

时间:2013-06-11 18:49:55

标签: .net amazon-s3

使用.NET 4.5将包含非ascii字符和一些标点字符的密钥上传到Amazon S3时出现问题。相同的代码在.NET 4.0下运行正常,但在使用此异常编译4.5时失败:

  

Amazon.S3.AmazonS3Exception:我们计算的请求签名   与您提供的签名不符。检查您的密钥并签名   方法

一些示例失败的密钥:

fail-é-(
fail-é-)
fail-é-[

和一些好的钥匙:

ok-é-x
ok-é-é
ok-(-)

从失败的密钥中选择一个密钥,并使用此示例C#代码简单的put对象失败:

using Amazon.S3.Model;

// ...

var s3key = "...";
var s3secret = "...";
var client = Amazon.AWSClientFactory.CreateAmazonS3Client(s3key, s3secret);
var bucketName = "unicode-test";

var key = "fail-é-(";

client.PutObject(new PutObjectRequest
    {
        BucketName = bucketName,
        Key = key,
        ContentBody = "TEST CONTENT"
    });

我需要添加的新的4.5 + AWSSDK魔法是什么?

PS。控制台应用程序和Web应用程序中的问题相同。

1 个答案:

答案 0 :(得分:0)

发表评论太迟了,但有人可能会发现它仍然有用。

我在AWS .NET 4.5 SDK中遇到了同样的问题。 解决方案是明确地将签名版本设置为V2:

AmazonS3Config config = new AmazonS3Config();                  
config.SignatureVersion = "2";
...