Нет настроек RegionEndpoint или ServiceURL

Я пишу код для загрузки файлов в AWS S3 и получаю следующее исключение:

AmazonClientException: не настроены RegionEndpoint или ServiceURL

Мой код:

Console.WriteLine("ready to upload");
AWSCredentials credentials;
credentials = new BasicAWSCredentials(accessKeyID.Trim(), secretKey.Trim());
AmazonS3Client s3Client = new AmazonS3Client(accessKeyID.Trim(), secretKey.Trim(), Amazon.RegionEndpoint.USEast1);
Console.WriteLine("Successful verification");
Console.WriteLine("Check if the bucket exists");
if (!CheckBucketExists(s3Client, bucketName))
{
    s3Client.PutBucket(bucketName);
    Console.WriteLine("create bucket");
}
TransferUtility utility = new TransferUtility();
Console.WriteLine("Upload  Directory......");
//exception here
utility.UploadDirectory(@"E:\telerikFile\13ginabdfglil.com", bucketName);

Исключение:

Amazon.Runtime.AmazonClientException: No RegionEndpoint or ServiceURL configured
  Amazon.Runtime.ClientConfig.Validate()
  Amazon.S3.AmazonS3Config.Validate()
  Amazon.Runtime.AmazonServiceClient..ctor(AWSCredentials credentials, ClientConfig config)
  Amazon.S3.AmazonS3Client..ctor()
  Amazon.S3.Transfer.TransferUtility..ctor()
  Telerik2Amazon.Program.UploadFile()

Что я должен делать?

Ответ 1

Короткий ответ на ошибку...

Amazon.Runtime.AmazonClientException: нет настроек RegionEndpoint или ServiceURL

... в моем случае было указать область при конструировании объекта клиента (для меня это было AmazonSimpleEmailServiceClient).

Предполагая, что вы используете BasicAWSCredentials, попробуйте следующее:

var credentials = new BasicAWSCredentials(accessKeyID, secretKey);

new AmazonS3Client(credentials, RegionEndpoint.USEast1);

//                              ^^^^^^^^^^^^^^^^^^^^^^  add this

Ответ 2

В Asp.Net эту ошибку можно исправить, добавив эту строку в Web.config:

<add key="AWSRegion" value="us-east-1" />

Работал для меня на AWSSDK.SimpleEmail v3.3

Ответ 3

Мой идентификатор доступа и секретный ключ могут быть использованы.
Поэтому я перестаю использовать класс TransferUtility и выбираю другой класс с именем PutObjectRequest для загрузки своих файлов.
attontion: PutObjectRequests Property Key, это имя каталога и имя файла должно равняться имени директории в локальных файлах "и имя файла.
коды здесь:

        String s3Path = "987977/Baby.db";
        Console.WriteLine("Ready to upload");
        AWSCredentials credentials;
        credentials = new BasicAWSCredentials(accessKeyID.Trim(), secretKey.Trim());
        AmazonS3Client s3Client = new AmazonS3Client(accessKeyID.Trim(), secretKey.Trim(), Amazon.RegionEndpoint.USEast1);
        Console.WriteLine("Successful verification");
        Console.WriteLine("Check: if the bucket exists");
        if (!CheckBucketExists(s3Client, bucketName))
        {
            s3Client.PutBucket(bucketName);
            Console.WriteLine("Creat bucket");
        }
        string localPath = @"E:\telerikFile\987977\Baby.db";
        PutObjectRequest obj = new PutObjectRequest();
        var fileStream = new FileStream(localPath, FileMode.Open, FileAccess.Read);
  //      obj.FilePath= @"E:\telerikFile\987977\Baby.db";
        obj.InputStream = fileStream;
        obj.BucketName = bucketName;
        obj.Key = s3Path;
       // obj.ContentBody = "This is sample content...";
        obj.CannedACL = S3CannedACL.PublicRead;
        Console.WriteLine("uploading");
        // default to set public right  
        s3Client.PutObject(obj);

Ответ 4

Если вы используете TransferUtility() попробуйте это:

var credentials = new BasicAWSCredentials(accessKeyID, secretKey);

var S3Client = new AmazonS3Client(credentials, RegionEndpoint.USEast1);

this._transferUtility = new TransferUtility(S3Client);

Ответ 5

Прежде всего, вы не должны жестко кодировать учетные данные aws.

У меня была похожая ошибка. Оказалось, это было связано с изменениями в .Net Core:

Одним из самых больших изменений в .NET Core является удаление ConfigurationManager и стандартных файлов app.config и web.config.

https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-netcore.html

Для быстрого и грязного подхода вы можете создать файл достоверного профиля на вашем компьютере, см. Https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html.

например, C:\Users\<USERNAME>\.aws\credentials в Windows

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

тогда в вашем коде вы можете просто сделать что-то вроде:

var dbClient = new AmazonDynamoDBClient(new StoredProfileAWSCredentials(), 
                     RegionEndpoint.USEast1);

Более сложный способ: https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-netcore.html#net-core-configuration-builder

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

appsettings.Development.json

{
  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2"
  }
}


var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();