繁体   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