ASP.NET CORE:通过WEBAPI更改connectionString

时间:2018-01-31 18:02:21

标签: asp.net-web-api asp.net-core

我在appsetting.json文件中声明了连接字符串。我想通过web api调用更改连接字符串。

有办法吗?

我正在使用ASP.Net Core。

appsettings.json:

  "Database": {
    "ProviderName": "MySQL",
    "ConnectionString": "server=localhost;database=sampledb;uid=user;pwd=user"
  },

Startup.cs

  var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);  

  //Accessing Database section from appsettings.json
  services.Configure<dbSettings>(StaticSettings.GetSection("Database"));

1 个答案:

答案 0 :(得分:0)

首先,在开发环境中,存储连接字符串的正确位置是用户秘密。在Visual Studio中,右键单击Project&gt; 管理用户秘密,打开secrets.json。 User Secrets选项仅适用于您的开发人员。机。

如果您的应用程序在Azure上运行,则Azure Portal具有应用程序设置选项,可以为您的应用程序定义连接字符串。

提出问题,您可以在应用程序设置中存储多个连接字符串。例如:

 "ConnectionStrings": {
    "dev_db": "Server=devSQLServerName;Database=dev;User Id=userName;Password=yourPassword",
    "test_db": "Server=testSQLServerName;Database=test;User Id=userName;Password=yourPassword",
    "staging_db": "Server=stagingSQLServerName;Database=staging;User Id=userName;Password=yourPassword",
    "production_db": "Server=prodSQLServerName;Database=staging;User Id=userName;Password=yourPassword"
}

现在,编写一个方法来根据您的环境获取连接字符串。

    public string GetDBConnectionString(string environment)
    {
        string connectionString = string.Empty;

        if (environment == "production")
        {
            connectionString = Configuration["ConnectionStrings:production_db"];
        }
        else if (environment == "development")
        {
            connectionString = Configuration["ConnectionStrings:dev_db"];
        }
        else if (environment == "test")
        {
            connectionString = Configuration["ConnectionStrings:test_db"];
        }
        else if (environment == "stage")
        {
            connectionString = Configuration["ConnectionStrings:staging_db"];
        }

        if (connectionString == null)
        {
            throw new Exception("Could not locate production DB connection string for env: " + environment );
        }
        else
        {
            return connectionString;
        }
    }

现在从Web API的操作方法或您想要使用的位置调用此方法。