簡體   English   中英

ASP.NET Core 2.0-配置[“ TestSecret”]始終返回null

[英]ASP.NET Core 2.0 - Configuration[“TestSecret”] always return null

我開始在ASP.NET Core 2.0 Web Api上工作 我在secrets.json文件中添加了2個機密,並試圖通過Startup文件中的Configuration屬性讀取它們。 每次我打電話給我時,都嘗試從Configuration變量獲取值,它返回null。 下面顯示了我如何從secrets.json讀取此示例。

public void ConfigureServices(IServiceCollection services)
{
    var secret = Configuration["TestSecret"];

我的secrets.json文件如下所示:

{
    "TestSecret": "SecretValue"
}

我也嘗試過使用以下方法檢索值:

public void ConfigureServices(IServiceCollection services)
{
    IConfigurationSection secret = Configuration.GetSection("TestSecret");

    var value = secret.Value;

這將返回與TestSecret部分相對應的部分,但IConfigurationSection的值也為null。

我試圖安裝Microsoft.Extensions.Configuration.UserSecrets NuGet程序包,但這沒有幫助。 我是否缺少需要安裝的軟件包,或者是否有其他方法來檢索此值?

如果我需要提供更多信息來幫助解決此問題,請在評論中提出。 我將嘗試提供盡可能多的信息來幫助解決此問題。

通常,您使用一個名為“ appSettings.json”的文件來存儲所有類似的json值。 無需在2.0中手動添加此文件。 除非有多個json文件的特定原因,否則我建議您這樣做,因為它允許您將所有應用程序特定的設置都放在一個位置

可以手動添加.json文件。 BuildWebHost方法中Program.cs中的asp.net Core 2.0

您添加以下內容

.ConfigureAppConfiguration((WebHostBuilderContext, ConfigurationBuilder) =>
        {
            ConfigurationBuilder
                    .AddJsonFile("Secrets.json", optional: true);
            ConfigurationBuilder.AddEnvironmentVariables();
        })

根據設置,整個方法應如下所示

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((WebHostBuilderContext, ConfigurationBuilder) =>
        {
            ConfigurationBuilder
                    .AddJsonFile("Secrets.json", optional: true);
            ConfigurationBuilder.AddEnvironmentVariables();
        })
        .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseApplicationInsights()
        .Build();

要從您的ConfigureServices方法中獲取值,請使用

var testSecret = Configuration.GetSection("Secrets")["TestSecret"];

這是Secrets.Json文件的外觀

{
  "Secrets": 
  {
    "TestSecret": "SecretValue"
  }
}

您是否配置為在啟動方法中使用機密?

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder();

    if (env.IsDevelopment())
    {
        builder.AddUserSecrets<Startup>();
    }

    Configuration = builder.Build();
}

在這里閱讀更多

對我來說,它是空的,因為我正在處理其他ASPNETCORE_ENVIRONMENT值,並且默認邏輯顯然依賴於此“開發” ...鑒於secrets.json完全是本地開發方案,這具有基本意義。

另外,對我們而言,“開發”可能意味着雲計算運行時開發人員或原始本地開發人員,這讓人感到有點胃灼熱,因此我們被迫創建另一個代表本地開發人員的鍵/值,因為ASPNETCORE_ENVIRONMENT =開發驅動着我們所不願做的特定邏輯不想輸。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM