You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6升级AWSSDK.S3至3.7.107后预签名URL签名不匹配问题

解决方案:AWSSDK.S3升级后签名不匹配问题

核心原因

新版本AWSSDK.S3(3.7+)会严格按照AWS签名规范对Bucket名称中的特殊字符(比如正斜杠/)进行URL编码,而旧版本未做此处理,导致签名字符串不一致,触发签名不匹配错误。

推荐解决方案:修正Bucket与Key的正确划分

S3的存储结构中没有实际的文件夹,所谓的“嵌套文件夹”其实是通过对象Key中的前缀实现的。你之前的写法混淆了Bucket名称和对象前缀,正确的做法应该是:

  • BucketName设为实际的桶名:bucket-name-mobile
  • Key包含完整的前缀+文件名:test/637431660687617131_Sachin_Pakale.jpg

修改后的代码:

var request = new GetPreSignedUrlRequest
{
    BucketName = "bucket-name-mobile",
    Key = "test/637431660687617131_Sachin_Pakale.jpg",
    Expires = DateTime.Now.AddDays(1)
};

url = s3Client.GetPreSignedURL(request);

这个方案完全符合S3的设计规范,不会再出现编码冲突问题,也是长期维护的最优选择。

备选方案:禁用Bucket名称编码(不推荐)

如果因为历史原因必须保留原有的BucketName写法,可以尝试通过配置AmazonS3Config禁用URL编码,但注意这可能违反AWS签名规范,存在潜在风险:

var config = new AmazonS3Config
{
    RegionEndpoint = RegionEndpoint.USEast1,
    DisableUrlEncoding = true // 禁用URL编码
};

var s3Client = new AmazonS3Client(config);

使用此配置后,SDK不会对BucketName中的正斜杠进行编码,签名字符串会和旧版本保持一致。但该配置会影响所有请求的URL编码行为,可能引发其他兼容性问题,仅建议临时过渡使用。

内容的提问来源于stack exchange,提问作者Sachin Pakale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:52:00