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

如何让Amazon S3的C# .NET Core SDK调用GetObjectAsync不抛异常?

解决方案

可以通过配置AWS S3客户端参数,让GetObjectAsync不抛出异常,转而通过响应结果判断对象是否存在,具体实现如下:

方法一:关闭全局异常抛出

修改AmazonS3Config的ThrowOnError属性为false,SDK将不再主动抛出异常,所有请求结果(包括错误)都会通过响应对象返回:

var s3Config = new AmazonS3Config
{
    ThrowOnError = false
};

using var s3Client = new AmazonS3Client(s3Config);

var getRequest = new GetObjectRequest
{
    BucketName = "目标存储桶名称",
    Key = "目标对象键"
};

var response = await s3Client.GetObjectAsync(getRequest);

// 根据响应状态码判断对象状态
if (response.HttpStatusCode == HttpStatusCode.NotFound)
{
    // 对象不存在,执行对应逻辑
}
else if (response.HttpStatusCode == HttpStatusCode.OK)
{
    // 对象存在,读取响应流处理内容
    using var contentStream = response.ResponseStream;
    // 后续业务逻辑
}
else
{
    // 处理其他HTTP错误状态
}

补充说明

  • 设置ThrowOnError = false后,所有S3操作的异常都会被抑制,因此需要主动检查响应的状态码或response.ErrorCode来识别错误类型,避免遗漏其他异常场景。
  • 如果希望减少API调用次数,也可以先调用DoesObjectExistAsync检查对象是否存在,再决定是否执行GetObjectAsync,这种方式适合对象不存在为高频场景的情况:
var exists = await s3Client.DoesObjectExistAsync("目标存储桶名称", "目标对象键");
if (exists)
{
    var response = await s3Client.GetObjectAsync("目标存储桶名称", "目标对象键");
    // 处理对象内容
}
else
{
    // 对象不存在逻辑
}

内容的提问来源于stack exchange,提问作者Dmitry Arestov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:19:50