读取appsettings.json文件-字段保持为null

7

我觉得我的startup.cs有问题,因为我无法从<IOption> config中获取任何值。

所以...我们有我们的appsettings.json

"Config": {
    "ApplicationName": "some name",
    "ConnectionString": "someconstring",
    "Version": "1.0.0"
  },

这里有我们的模型
public class Config
    {   
        public string ApplicationName { get; set; }
        public string ConnectionString { get; set; }
        public string Version { get; set; }
    }

启动.cs

 public Startup(IConfiguration configuration)

    {
        Configuration = configuration;
    }



public static IConfiguration Configuration { get; set; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        // Add functionality to inject IOptions<T>
        services.AddOptions();

        // Add our Config object so it can be injected
        services.Configure<Config>(Configuration);
    }

然后在我们的控制器中,我尝试加载这些数据,但不幸的是它们保持为空。

   private IOptions<Config> config;
            public CompaniesController(IOptions<Config> config)
            {
                this.config = config;
            }

我尝试使用类似以下的代码更改startup.cs文件:

 services.Configure<Config>(options =>
            {
                options.ConnectionString = Configuration.GetSection("Config:ConnectionString").Value;
            });

但似乎这并没有起作用。
我使用的资源
https://dzone.com/articles/dynamic-connection-string-in-net-core

https://dev59.com/fVwZ5IYBdhLWcg3wb_-Y

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-2.2

但很明显我在这里缺少一个关键点。
编辑:我正在使用ASP.Net Core 2.0。

enter image description here

编辑2:

Program.cs

public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }

整个Appsettings.json文件。
{
  "Config": {
    "ApplicationName": "somename",
    "ConnectionString": "someconstring",
    "Version": "1.0.0"
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

编辑3: 在我的前端应用程序中,我是这样导入API的。 输入图像说明


你试过这个吗?https://dev59.com/fVwZ5IYBdhLWcg3wb_-Y#31453663 - Alex
我建议您从appsettings.json文件中删除Config顶级属性。它没有提供任何价值,因为appsetings已经是“config”,并且这样做应该可以使services.Configure<Config>(Configuration)正常工作。 - Henk Mollema
2个回答

8
services.Configure<Config>(Configuration);

这行代码没有达到预期的结果,因为你要查找的JSON属性嵌套在appsettings.json文件中的Config属性下。为了按照预期加载这些值,请使用GetSection方法获取Config部分,并将其传递给Configure<TOptions>方法:

services.Configure<Config>(Configuration.GetSection("Config"));

0
     services.Configure<Config>(options =>
                {
                    options.ConnectionString = Configuration.GetValue<string>("Config:ConnectionString");
                    options.ApplicationName = "test";
                });

如果您想更细粒度地配置您的选项。


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