Две строки подключения для локального и хост-сервера

Я хотел бы спросить, есть ли способ заставить ASP.NET Core 2 выбирать разные строки подключения.

Это довольно раздражает, чтобы продолжать изменять строку подключения в appsettings.json файл каждый раз, когда я публикую свой сайт на хостинг-сервере..

Я использую этот код, чтобы получить строку подключения.

 services.AddDbContext<AppIdentityDbContext>(options => 
     options.UseSqlServer(Configuration["Data:WebDataBase:ConnectionString"]));

Может быть, есть простой способ, но я думаю об использовании оператора if в моем Startup.cs:

if (local) {
    services.AddDbContext<AppIdentityDbContext>(options => 
        options.UseSqlServer(Configuration["Data:WebDataBase1:ConnectionString"]));
}
else {
    services.AddDbContext<AppIdentityDbContext>(options => 
        options.UseSqlServer(Configuration["Data:WebDataBase2:ConnectionString"]));
}

Но как я могу установить это local переменная, является ли сервер моим локальным компьютером или сервером живого хостинга?

"Data": {
  "WebDataBase1": {
    "ConnectionString": "Data Source=DatasoruceName;Initial Catalog=DBname;Trusted_Connection=True;Integrated Security=True;"
  },

  "WebDataBase2": {
    "ConnectionString": "Data Source=DatasoruceName;Initial Catalog=DatabaseName;Trusted_Connection=True;Integrated Security=True;"
  }
}

1 ответ

Решение

Конфигурация конкретной среды не должна указываться в коде. ASP.NET Core имеет механизм для этого, который позволяет вам менять конфигурацию в зависимости от того, в какой среде вы работаете.

При разработке приложения вы обычно запускаете Development среда. Когда вы развертываете свое приложение для производства, Production среда используется по умолчанию. Но если у вас есть другие среды, вы можете полностью создать новые имена для них и иметь конкретные конфигурации для них. Это все объясняется в главе "Окружающая среда" документации.

Что среда позволяет вам сделать, это создать несколько appsettings.json файлы. Ядро ASP.NET по умолчанию поставляется с двумя файлами: appsettings.json а также appsettings.Development.json,

Первый должен содержать неопределенную конфигурацию среды; вещи, которые относятся ко всем средам. Последний файл содержит конфигурацию, относящуюся к разработке, и, например, настраивает уровень ведения журнала, чтобы вы могли получить больше информации во время разработки. Вы также можете использовать эти файлы, чтобы указать строку подключения по умолчанию в appsettings.json и переписать это для развития внутри appsettings.Development.json,

Кроме того, файл конфигурации следует очень простому шаблону: appsettings.<Environment>.json, Так что если вы бежите в Production среда, файл с именем appsettings.Production.json будет загружен, если он существует. Этот механизм позволяет настраивать все среды по-разному, не прибегая к обнаружению в вашем коде.

Кроме того, существует также концепция пользовательских секретов при разработке. Они предназначены для конфигураций, специфичных для разработки, которые применимы только к себе, но не относятся, например, к другим членам вашей команды. Это в основном конфигурация для каждой машины, которая позволяет перезаписывать appsettings.json и appsettings.Development.json, Это описано в главе с секретами пользователя.

Лучше всего избегать использования строк подключения в файлах конфигурации, так как вы хотите избежать того, чтобы люди, у которых есть доступ к вашим файлам конфигурации (например, через ваш исходный код), могли знать пароли к вашей базе данных. В этом случае вы можете использовать другие механизмы, например, переменные среды, которые являются локальными для процесса.


В вашем случае, когда вы просто используете встроенную защиту и, таким образом, полагаетесь на учетные данные текущего пользователя, это не такая большая проблема. Единственное, что вы пропускаете - это имя базы данных. - Таким образом, вы определенно можете начать с помещения строк подключения в файлы appsettings.

Так, например, именно так вы бы сконфигурировали контекст вашей базы данных в вашем стартапе ConfigureServices:

services.AddDbContext<AppIdentityDbContext>(options => 
    options.UseSqlServer(Configuration.GetConnectionString("WebDataBase"));

Ваш appsettings.Development.json будет выглядеть так:

{
  "ConnectionStrings": {
    "WebDataBase": "Data Source=DatasourceName;Initial Catalog=DBname;Trusted_Connection=True;Integrated Security=True;"
  }
}

И ваш appsettings.Production.json будет выглядеть так:

{
  "ConnectionStrings": {
    "WebDataBase": "Data Source=DatasourceName;Initial Catalog=DatabaseName;Trusted_Connection=True;Integrated Security=True;"
  }
}
Другие вопросы по тегам