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, чтобы он не регистрировался. Я также добавил его в приведенный выше код конфигурации. Работает нормально, но конфигурация по умолчанию никогда не найдет ее там, поэтому я сохраняю свой ручной сборщик конфигураций.

Другие вопросы по тегам