首页 > 解决方案 > 尝试通过 AWS C# SDK (digitalocean) 获取对象列表时出现异常

问题描述

为什么当我尝试获取对象列表(例如存储桶列表)时,我得到了 Disposed Exception?

System.ObjectDisposedException:“无法访问已处置的对象。ObjectDisposed_ObjectName_Name”

private string S3_ACCESS_KEY = "blablabla";
private string S3_SECRET_KEY = "blablabla";
private string S3_HOST_ENDPOINT = "https://fra1.digitaloceanspaces.com";
private string S3_BUCKET_NAME = "launchers";
private AmazonS3Client _client;

public DO()
{
    AmazonS3Config config = new AmazonS3Config();
    config.ServiceURL = S3_HOST_ENDPOINT;
    _client = new AmazonS3Client(S3_ACCESS_KEY, S3_SECRET_KEY, config);
}

public List<string> ListObject()
{
    var objects = _client.ListObjects(S3_BUCKET_NAME); // System.ObjectDisposedException: "Cannot access a disposed object.ObjectDisposed_ObjectName_Name"
    var objectsList = objects.S3Objects.Select(c => c.Key).ToList();
    return objectsList;
}       

标签: c#amazon-s3digital-ocean

解决方案


我仍然不明白是什么原因,但我解决了这个问题。

  1. 删除 awssdk 并安装 awssdk.s3 (Nuget)
  2. 更改了代码
public List<S3Object> ListObject()
{
    var objects = _client.ListObjectsAsync(S3_BUCKET_NAME).Result;
    return objects.S3Objects.ToList();
}

现在它可以工作了


推荐阅读