Две строки подключения для локального и хост-сервера
Я хотел бы спросить, есть ли способ заставить 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;"
}
}