Переопределение значений appsettings в ядре asp.net - PullRequest
0 голосов
/ 18 декабря 2018

Я переопределяю значения, заданные в файле appsettings.json, настраивая их на портале Azure.Для этого я внес следующие изменения, которые работают нормально, кроме случаев, когда я отлаживаю свой код.

Startup.cs

public Startup(IConfiguration configuration, IHostingEnvironment env)
{
    Configuration = configuration;

    IConfigurationBuilder builder = new ConfigurationBuilder();

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

    builder.AddEnvironmentVariables();

    Configuration = builder.Build();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    DBContext.ConnectionString = Configuration.GetConnectionString("Connectionstr");
    Constants.AppLogicURI = Configuration["MailUri:LogicAppUri"];
    Constants.BlobStorageKey = Configuration["BlobKey:BlobStorageKey"];
    Constants.BlobStorageConnectionString = Configuration["BlobConnectionString:BlobStorageConnectionString"];
    Constants.BlobUri = Configuration["Uri:BlobUri"];
    Constants.StorageAccount = Configuration["AccountName:StorageAccount"];
}

Когда я отлаживаю свой код, яя не получаю никаких значений из файла appsettings.json, из-за которого приложение не запустилось.

Я получу значения, только если закомментирую строку Configuration = builder.Build();

Не знаю, почему янужно сделать это и как решить эту проблему.

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Изменить

Configuration["BlobKey:BlobStorageKey"];

На

Configuration.GetSection("BlobKey:BlobStorageKey");

Поскольку Configuration равно Startup.Configuration и у вас есть Build () в Program.cs, поэтому вы должны закомментировать Configuration = builder.Build();

0 голосов
/ 18 декабря 2018

Причина, по которой ваш appsettings.json файл не читается, заключается в том, что вы не звоните SetBasePath на ConfigurationBuilder.Обычно это выполняется для вас с помощью Directory.GetCurrentDirectory() в WebHost.CreateDefaultBuilder, который сам по себе используется в Program.cs.

Хотя вы можете просто вызвать SetBasePath в конструкторе Startup, реальной причины нетсоздать свой собственный экземпляр IConfiguration, когда вы можете просто использовать передаваемый IConfiguration. Этот экземпляр уже настроен для чтения из и appsettings.json, и переменных среды с переопределением переменных средыуказанные в appsettings.json.

Любые параметры, указанные в разделах «Параметры приложения» и «Строки подключения» на портале Azure, будут иметь приоритет над параметрами, указанными в файле appsettings.json, поскольку они добавляются в качестве переменных среды всреда Azure.

0 голосов
/ 18 декабря 2018

Вам не нужно создавать конфигурацию самостоятельно, код .NET Core сделает это за вас, когда вы звоните WebHost.CreateDefaultBuilder(...) в Program.cs.

.NET Core настроит различных провайдеров, например Azureхранилище, файлы JSON, переменные окружения, командная строка и т. д.

Единственное, что вам нужно в Startup, это

Configuration = configuration;

Это уже есть в начале метода Startupименно поэтому он работает, когда вы закомментируете код Configuration = builder.build();.

Подробнее о различных провайдерах и порядке их чтения можно прочитать в документации по конфигурации .

РЕДАКТИРОВАТЬ

В документации показан порядок поставщиков, который автоматически добавляется .NET Core для вас.Последнее предложение раздела о провайдерах гласит:

Эта последовательность провайдеров создается, когда вы инициализируете новый WebHostBuilder с помощью CreateDefaultBuilder .Для получения дополнительной информации см. Веб-хост: настройка хоста .

Посмотрите на ссылку на CreateDefaultBuilder, поскольку она также объясняет, что этот метод настраивает для вас по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...