Я пытаюсь сохранить строку подключения в моей системной переменной (windows 10) для защиты моей конфиденциальной информации перед началом работы.
Когда я вызываю переменные среды, она возвращает нулевое значение.У меня нет ошибок.
Я следовал этим урокам:
https://www.youtube.com/watch?v=TNghzUs0BQI&fbclid=IwAR2YUue7740qgVT_5z04xruel-4NwOuUyjQj5E63T1UpYqRoVuz_81DiZTo
https://medium.com/@gparlakov/the-confusion-of-asp-net-configuration-with-environment-variables-c06c545ef732
Я не вижу, чтоЯ скучаю здесь.Насколько я понимаю, если я не использую префиксы, мне просто необходимо установить переменную окружения в моей системе, а затем сделать вызов.
Вот изображение моей переменной окружения.Я предоставляю ссылку, потому что у меня недостаточно интернет-точек для публикации изображения.
https://i.imgur.com/j614O1n.png
Это мой Startup.cs
private IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<dbApplicationServiceNavada>(options => options.UseMySql(Environment.GetEnvironmentVariable("ASNConnStr")));
services.AddScoped<IEmployeeData, SqlEmployeeData>();
services.AddScoped<ILanguageData, SqlLanguageData>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
IConfiguration configuration)
{
//Show exception stack trace when in dev mode
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//Use files in wwwroot folder
app.UseStaticFiles();
//Defines the available routes
app.UseMvc(ConfigureRoutes);
app.Run(async (context) =>
{
var RNA = configuration["RouteNA"];
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync(RNA);
});
}
Это мой webHostBuilder в Program.cs
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddEnvironmentVariables();
})
.UseStartup<Startup>()
.Build();
. Я также вижу, что у меня есть файл launchSettings.json с переменными среды, но мне интересно, совпадает ли это с переменными системной среды.
ПЕРВОЕ РЕДАКТИРОВАНИЕ:
Как уже упоминалось в ответе, я переименовал переменную среды в
MYSQLCONNSTR_ASNConnStr
Я также удалил часть в моей программе.загрузить переменную среды.
Теперь, когда я отлаживаю проект, я вижу в своем _confirguration.Providers загружаемую переменную среды.Вот картинка: https://i.imgur.com/xGulUvX.png
Когда я делаю
services.AddDbContext<dbApplicationServiceNavada>(options => options.UseMySql(_configuration.GetConnectionString("ASNConnStr")));
Он по-прежнему возвращает нулевое значение.Кажется, я не могу получить переменную.
Изображение ошибки: https://i.imgur.com/Kj0mvCS.png
ВТОРОЕ РЕДАКТИРОВАНИЕ:
Теперьпроблема решена, я просто хочу добавить к автору Simply Ged, что вместо:
services.AddDbContext<dbApplicationServiceNavada>(options => options.UseMySql(_configuration.GetConnectionString("ASNConnStr")));
мне пришлось сделать:
services.AddDbContext<dbApplicationServiceNavada>(options => options.UseMySql(Environment.GetEnvironmentVariable("ASNConnStr")));
Теперь все работает отлично!
ТРЕТЬЕ РЕДАКТИРОВАНИЕ:
После перезагрузки компьютера эта строка кода работает:
services.AddDbContext<dbApplicationServiceNavada>(options => options.UseMySql(_configuration.GetConnectionString("ASNConnStr")));
Похоже, что нам нужно перезагрузить компьютер / сервер вЧтобы получить переменную среды адекватно.
В заключение, ответ автора Simply Ged был верным.