簡體   English   中英

無法讀取 .net 核心 2.1 中的用戶機密

[英]Cannot read user secrets in .net core 2.1

我在嘗試讀取用戶機密時遇到問題。 我在startup.cs中的代碼如下:

 public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json",
                    optional: false,
                    reloadOnChange: true);

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

            builder.AddEnvironmentVariables();
            Configuration = builder.Build();
        }

從 appsettings.json 和環境變量讀取工作正常,但無論我在 secrets.json 文件中放入什么,都不會從中讀取任何值。 項目文件中UserSecretsId的值正確,env.IsDevelopment()為true。

配置包含三個提供程序。 一個 JsonConfigurationProvider 包含來自 appsettings.json 的數據,一個 EnvironmentVariablesConfigurationProvider 包含來自環境變量的值,一個 JsonConfigurationProvider 沒有數據。 我認為后一個是添加用戶機密的那個。 但為什么是空的?

我有一個項目分成兩個部分,但我不能為我的生命得到了秘密的衍生項目加載,它有完全相同的項目環境,包括secrets.json在VS2017項目樹....但它不會加載。

在檢查每個上的實際.csproj文件時,唯一的區別是生成的項目沒有UserSecretsId條目所以我只是右鍵單擊項目,點擊Manage User Secrets然后關閉隨后的Json編輯器,無需修改。

當我接下來運行項目時,我的原始secrets.json被加載了......而不是空白的。

看來,如果你的項目文件夾中有secrets.json ,這會覆蓋由Manage User Secrets創建的文件,這些文件在C:\\Users\\<user>\\AppData\\Roaming\\Microsoft\\UserSecrets\\<userSercretsId>創建它們

我在一個測試項目中讓它像這樣工作。 在 Startup.cs 中,我做了:

    internal IConfigurationRoot Configuration { get; private set;  }

    public override void ConfigureTestServices(ref IServiceCollection services)
    {        
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json",
                optional: false,
                reloadOnChange: true);
        builder.AddUserSecrets<Startup>(false);
        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
        services.AddScoped<IConfigurationRoot>(option => Configuration);
    

      // ... more settings
    }
  1. 配置文件中,您可以通過以下方式簡單地訪問它

     var secretValue = Configuration["SomeUserSecret"];
  2. 在外部,在您的測試類中,您通過在構造函數中指定IConfigurationRoot config來使用依賴注入,並將配置分配給 class 屬性,然后像訪問它一樣訪問它

     var secretValue = config["SomeUserSecret"];

關於准備工作,我發現這個有用的提示描述了您的項目的幾個准備步驟。 簡而言之,您需要編輯 csproj 文件並

  • 在 TargetFramework 下添加<UserSecretsId>Insert New Guid Here</UserSecretsId>
  • 在項目組中添加<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0"/>
  • 重新加載 csproj 文件 - 然后您可以右鍵單擊它和 select “管理用戶機密”,這將為您創建 secrets.json 文件。

嘗試沒有錯誤。 例如builder.AddUserSecrets();

我有同樣的問題。

暫無
暫無

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

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