.NET Core 2.2 - невозможно получить конфигурацию приложения из Azure AppConfig - PullRequest
0 голосов
/ 22 октября 2019

Я создал хранилище конфигураций приложений Azure и получил ключи доступа (EndPoint, Id, Secret, ConnectionString).

Теперь из моего приложения .NET Core WebAPI я хочу прочитать конфигурации из Azure. Я перепробовал много подходов, которые нашел в Интернете, но ни один из них не работает.

Я уже добавил ссылки на необходимые библиотеки Nuget. Мой appsettings.json:

{
    "ConnectionString:AppConfig": "Endpoint=https://somewhere.azconfig.io;Id=Hidden;Secret=Hidden",
    "EndPoint": "https://somewhere.azconfig.io"
}

В моем Program.cs есть:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
        var settings = config.Build();

        config.AddAzureAppConfiguration(options =>
        {
            options.Connect(settings["ConnectionStrings:AppConfig"]);
        });
    })
    .UseStartup<Startup>();

Тогда в моем Startup.cs конструкторе:

public Startup(
    IConfiguration configuration, ---> checked this but no Azure config data
    IHostingEnvironment hostingEnv
)
    {
        var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

        //this.Config = configuration;
        var builder = new ConfigurationBuilder()
                    .SetBasePath(hostingEnv.ContentRootPath)
                    .AddJsonFile(...)
                    .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

И этогде я читаю конфигурации, но все значения null

public void ConfigureServices(IServiceCollection services)
    {
        var dbConnection = Configuration.GetSection("MyApp:Key1:Key2").Value; ---> get null
        services.AddDbContext<MyDbContext>(options => options.UseSqlServer(dbConnection));

        _jwtLifespan = Configuration.GetValue<int>("MyApp:Key3"); ----> get null
        _jwtSecretKey = Configuration.GetSection("MyApp:Key4").Value; ----> get null

        .....
    }

Любой, пожалуйста, проверьте, что мне здесь не хватает, и предложите мне рабочее решение. Большое спасибо!

1 Ответ

0 голосов
/ 22 октября 2019

Предположим, это проблема с настройкой соединения. Из вашего кода вы используете settings["ConnectionStrings:AppConfig"] для получения строки подключения, однако вы используете appsettings.json.

Из руководства: Подключитесь к хранилищу конфигурации приложения , если вы хотите использовать settings["ConnectionStrings:AppConfig"], используйте dotnet user-secrets set ConnectionStrings:AppConfig <your_connection_string>, чтобы добавить строку подключения в Secret Manager.

Примечание: Секретный менеджер предназначен только для локального тестирования. Когда приложение развернуто в службе приложений Azure, используйте параметр приложения Строки подключения в службе приложений.

И если вы хотите использовать appsettings.json, вы можете попробовать приведенный ниже код.

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((hostingContext, config) =>
    {

        var builder = new ConfigurationBuilder()

            .SetBasePath(Environment.CurrentDirectory)

            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)

            .AddEnvironmentVariables();

        var Configuration = builder.Build();
        var settings = config.Build();
        config.AddAzureAppConfiguration(Configuration.GetSection("ConnectionStrings:AppConfig").Value);
    })
    .UseStartup<Startup>();

И затем я использую учебный пример, чтобы показать значение в AppConfiguration.

enter image description here

enter image description here

Надеюсь, это поможет вам, если у вас все еще есть другие проблемы, пожалуйста, дайте мне знать.

...