ASP.NET Core 2.0 - Configuration["TestSecret"] 总是返回 null

3

我开始着手开发一个 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中的值也为空。
我尝试安装了Microsoft.Extensions.Configuration.UserSecrets NuGet包,但这并没有帮助。我是否缺少需要安装的包或者有其他方法可以检索此值?
如果需要提供更多信息来帮助解决此问题,请在评论中提问。我会尽可能提供更多信息来帮助解决此问题。
3个回答

4

通常情况下,您可以使用名为“appSettings.json”的文件来存储所有类似于json值的内容。在2.0版本中,不需要手动添加此文件。除非有特定的原因需要拥有多个json文件,否则我建议将所有应用程序特定的设置放在同一个位置。

但是,您也可以手动添加.json文件。对于asp.net Core 2.0,请在Program.cs 中的BuildWebHost方法中添加以下内容:

添加如下代码:

.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"
  }
}

我采纳了您关于使用 appsettings.json 文件的评论,并按照您所概述的方式,从 Configuration 属性中获取值。不需要使用 secrets.json 文件。 - CraftyCoder

2
对我来说,这是null,因为我尝试了其他ASPNETCORE_ENVIRONMENT值,而默认逻辑显然依赖于它是“Development”... 这在本地开发场景中使用secrets.json完全是有道理的。
另外,对我们来说,有点心烦意乱的是,“Development”可能意味着云运行时的开发或原始的本地开发,因此我们被迫创建另一个键/值来表示本地开发,因为ASPNETCORE_ENVIRONMENT = Development驱动了我们不想失去的特定逻辑。
最初的回答:enter image description here

2

你是否在启动方法中配置了使用秘钥?

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

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

    Configuration = builder.Build();
}

点击这里了解更多相关IT技术内容。


我还没有尝试过那个,但它也返回了一个空值。 - CraftyCoder
1
这是关于 asp.net Core 1.0 的内容。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接