4

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

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

一些示例失败的键:

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

和几个好键:

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

从失败的键中选择一个键,一个简单的 put 对象失败,这个示例 C# 代码:

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 魔法?

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

4

1 回答 1

0

评论太晚了,但有人可能会觉得它仍然有用。

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

AmazonS3Config config = new AmazonS3Config();                  
config.SignatureVersion = "2";
...
于 2018-05-29T05:02:23.833 回答