API Core 3.1 в решении ServiceFabric, местные секреты не читаются
Я выдергиваю волосы прямо сейчас. Я пробовал получить Секреты разными способами. Вот где я нахожусь:
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
//Configuration = configuration; // <<=== THIS DOES NOT WORK - CONFIG IS ALWAYS EMPTY ===
// Manually add configuration...
var app = Assembly.Load(new AssemblyName(env.ApplicationName));
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true) // When app is published
.AddEnvironmentVariables();
if (app != null && env.IsDevelopment())
builder.AddUserSecrets(app, optional: false);
Configuration = builder.Build();
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
var connectionString = Configuration.GetConnectionString("MySqlConn");
var password = Configuration["MyPassword"]; // <<=== THIS FAILS - ALWAYS NULL ===
var builder = new SqlConnectionStringBuilder(connectionString);
builder.Password = password;
connectionString = builder.ConnectionString;
services.AddDbContext<MySqlContext>(options => options.UseSqlServer(connectionString));
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API v1"); c.RoutePrefix = string.Empty; });
if (!env.IsProduction())
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
}
Когда я проверяю через CLI, я вижу, что секреты установлены правильно
список секретов пользователей
dotnet MyPassword = *************
Что мне не хватает?
1 ответ
Service Fabric при локальном запуске запускается в контейнере Docker. Это означает, что папка, в которой находится файл Secrets.json, изначально недоступна для всего, что запущено в контейнере. На короткое время (взломать) я переместил secretts.json в корневую папку моего приложения (с appsettings.json) и пометил его в моем.gitignore, чтобы он не регистрировался. Я также добавил его в приведенный выше код конфигурации. Работает нормально, но конфигурация по умолчанию никогда не найдет ее там, поэтому я сохраняю свой ручной сборщик конфигураций.