1

我正在Amazons AWS Elastic Beanstalk上創建.NET Core Web API。 我試圖添加數據庫,但他們的嚮導添加數據庫沒有對.NET的核心工作 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_NET.rds.html.NET核心AWS RDS連接

它說,使用來獲得相關信息「ConfigurationManager.AppSettings;」,但這是不可能的.NET核心。

任何人都可以提供一些關於如何獲取數據庫信息的信息嗎? ( 「RDS_DB_NAME」 「RDS_USERNAME」 「RDS_PASSWORD」 「RDS_HOSTNAME」 )

UPDATE 我試圖在https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration 閱讀,但我還沒有解決的問題。我似乎仍然無法從AWS獲取這些值。

它只是返回無論我在我自己的appsettings.json 這裏設置是我的代碼: MyOptions.cs

public class MyOptions 
{ 
    public MyOptions() 
    { 
     // Set default value. 
    } 
    public string RDS_HOSTNAME { get; set; } 
    public string RDS_PORT { get; set; } 
    public string RDS_DB_NAME { get; set; } 
    public string RDS_USERNAME { get; set; } 
    public string RDS_PASSWORD { get; set; } 
} 

StartUp.cs

public void ConfigureServices(IServiceCollection services) 
{ 
    // Register the IConfiguration instance which MyOptions binds against. 
    services.Configure<MyOptions>(Configuration); 
    // Add framework services. 
    services.AddApplicationInsightsTelemetry(Configuration); 

    services.AddMvc(); 
} 

HomeController.cs

namespace WebApplication2.Controllers 
{ 
    [Route("")] 
    public class HomeController : Controller 
    { 
     private readonly MyOptions _options; 

     public HomeController(IOptions<MyOptions> optionsAccessor) 
     { 
      _options = optionsAccessor.Value; 
     } 

     [HttpGet] 
     public IActionResult Index() 
     { 
      var RDS_DB_NAME = _options.RDS_DB_NAME; 
      var RDS_HOSTNAME = _options.RDS_HOSTNAME; 
      var RDS_PASSWORD = _options.RDS_PASSWORD; 
      var RDS_PORT = _options.RDS_PORT; 
      var RDS_USERNAME = _options.RDS_USERNAME; 
      return Content($"RDS_DB_NAME = {RDS_DB_NAME}, RDS_HOSTNAME = {RDS_HOSTNAME}, RDS_PASSWORD = { RDS_PASSWORD}, RDS_PORT = {RDS_PORT}, RDS_USERNAME = { RDS_USERNAME}"); 
     } 
    } 
} 
+0

您應該查看dotnet核心中的配置管理,網址爲https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration –

+0

謝謝Babak。我讀了它,但我無法弄清楚如何讓它起作用。如果您有時間幫助更多,我現在已經在OP中編寫了我的代碼。否則,謝謝。 – thatname

回答

1

我遇到了這個確切的問題,它更加複雜編輯比我預期的。

第1步 - 我修改了this answer從另一個堆棧溢出問題。我在Startup.cs代碼是這樣的:

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true) 
     .AddJsonFile(@"C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration", optional: true, reloadOnChange: true) 
     .AddEnvironmentVariables(); 

    // This adds EB environment variables. 
    builder.AddInMemoryCollection(GetAwsDbConfig(builder.Build())); 

    Configuration = builder.Build(); 
} 

private Dictionary<string, string> GetAwsDbConfig(IConfiguration configuration) 
    { 
     Dictionary<string, string> dict = new Dictionary<string, string>(); 

     foreach (IConfigurationSection pair in configuration.GetSection("iis:env").GetChildren()) 
     { 
      string[] keypair = pair.Value.Split(new[] { '=' }, 2); 
      dict.Add(keypair[0], keypair[1]); 
     } 

     return dict; 
    } 

private string GetRdsConnectionString() 
{ 
    string hostname = Configuration.GetValue<string>("RDS_HOSTNAME"); 
    string port = Configuration.GetValue<string>("RDS_PORT"); 
    string dbname = Configuration.GetValue<string>("RDS_DB_NAME"); 
    string username = Configuration.GetValue<string>("RDS_USERNAME"); 
    string password = Configuration.GetValue<string>("RDS_PASSWORD"); 

    return $"Data Source={hostname},{port};Initial Catalog={dbname};User ID={username};Password={password};"; 
} 

第二步 - 你需要去RDS服務在AWS控制檯。選擇您要連接的實例 - >實例操作 - >查看詳細信息。您將能夠找到RDS_HOSTNAME(端點)和RDS_PORT(端口)。

RDS_DB_NAME是您的代碼旨在使用的數據庫名稱。

RDS_USERNAME和RDS_PASSWORD是您在Elastic Beanstalk中創建數據庫時使用的主用戶名和密碼。如果你轉到Elastic Beanstalk - > Configuration - > Data Tier - >(點擊Gear),你會看到你的主用戶名,如果你忘記了密碼,可以選擇更改你的密碼。

第3步 - 現在您已擁有所有數據,您必須在Elastic Beanstalk中輸入這些選項作爲環境屬性。轉至Elastic Beanstalk - >軟件配置 - >(點擊齒輪)。在此頁面的底部是環境屬性。這裏是您希望在步驟一中輸入代碼中的名稱以及步驟二中的RDS中的值。

有關來自AWS文檔的更多信息,請參閱herehere