Gre*_*uff 4 c# amazon-s3 amazon-web-services asp.net-core
工具
我想做什么
为使用 localstack 端点作为 S3 的 ServiceURL 的开发环境配置 Amazon S3 客户端
我正在尝试Startup.cs使用 ASP.NET Core 的本机依赖注入在我的文件中全局配置 S3 客户端
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAWSService<IAmazonS3>();
}
Run Code Online (Sandbox Code Playgroud)
问题
我不知道如何为 S3 客户端设置 ServiceURL。我在AWS 文档中看到您可以在appsettings.json文件中配置此属性。但是,这并不能解决我的问题,因为我需要集成多个 AWS 服务。
我在谷歌上搜索的所有内容都表明你只需要做这样的事情:
var s3Client = new AmazonS3Client(new AmazonS3Config
{
ServiceURL = "http://localhost:5002"
});
Run Code Online (Sandbox Code Playgroud)
但是我必须在使用 S3 客户端的每个类中都这样做,这似乎不正确。
任何帮助表示赞赏。谢谢
您可以添加包引用AWSSDK.Extensions.NETCore.Setup。这使您可以访问一些扩展方法来帮助您在 .NET Core DI 中设置 AWS 服务。
services.AddDefaultAWSOptions(config.GetAWSOptions());
services.AddAWSService<IAmazonS3>();
services.AddAWSService<IAmazonSQS>();
Run Code Online (Sandbox Code Playgroud)
然后,您可以在启用服务的情况下启动 LocalStackedge并设置PORT_EDGE_HTTP环境变量。
PORT_EDGE_HTTP=50234 SERVICES=edge,s3,sqs localstack start
Run Code Online (Sandbox Code Playgroud)
这允许您对 LocalStack 提供的所有服务使用相同的内容,ServiceURL而不是在其自己的端口上运行的各种特定于服务的 URL。这可以通过设置appsettings.json。
{
"AWS": {
"ServiceURL": "http://localhost:50234"
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我仍在试图弄清楚的一件事是如何设置ForcePathStylevia appsettings.json。AWS 不需要这个集合,但显然 LocalStack 需要(至少现在是这样)。
好吧,我想我想通了这一点。
而不是使用内置的 ASP.NET Core DI:
services.AddAWSService<IAmazonS3>();
Run Code Online (Sandbox Code Playgroud)
我正在像这样使用 Autofac(文档):
var s3Config = new AmazonS3Config
{
ServiceURL = _configuration.GetSection("AWS:ServiceURL").Value,
ForcePathStyle = true
};
builder.RegisterType<AmazonS3Client>()
.As<IAmazonS3>()
.WithParameter(new TypedParameter(typeof(AmazonS3Config), s3Config))
.InstancePerLifetimeScope();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3457 次 |
| 最近记录: |