ASP.NET Core:JSON 配置 GetSection 返回 null
Posted
技术标签:
【中文标题】ASP.NET Core:JSON 配置 GetSection 返回 null【英文标题】:ASP.NET Core: JSON Configuration GetSection returns null 【发布时间】:2017-10-13 20:54:19 【问题描述】:我有一个文件appsettings.json
,看起来像这样:
"MyConfig":
"ConfigA": "value",
"ConfigB": "value"
在我的Startup.cs
中,我正在构建我的IConfiguration
:
public ConfigurationRoot Configuration get; set;
public Startup(ILoggerFactory loggerFactory, IHostingEnvironment environment)
var builder = new ConfigurationBuilder()
.SetBasePath(environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
public void ConfigureServices(IServiceCollection services)
//GetSection returns null...
services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
但Configuration.GetSection("MyConfig")
总是返回null
,尽管该值存在于我的 JSON 文件中。 Configuration.GetSection("MyConfig:ConfigA")
工作正常。
我做错了什么?
【问题讨论】:
我也有同样的问题,你有解决方案吗? 这也是你的问题吗? ***.com/questions/50669724/… 【参考方案1】:对于遇到这种情况并试图在测试项目中做同样事情的任何人,这对我有用:
other = config.GetSection("OtherSettings").Get<OtherSettings>();
【讨论】:
这对于启动也很有用 - 你不想Configure
因为你需要在 DI 中注册的设置,而不是在已解析的依赖项中。【参考方案2】:
请参考以下代码
public class Startup
public Startup(IConfiguration configuration)
Configuration = configuration;
public IConfiguration Configuration get;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
var config = Configuration.GetSection("MyConfig");
// To get the value configA
var value = config["ConfigA"];
// or direct get the value
var configA = Configuration.GetSection("MyConfig:ConfigA");
var myConfig = new MyConfig();
// This is to bind to your object
Configuration.GetSection("MyConfig").Bind(myConfig);
var value2 = myConfig.ConfigA;
【讨论】:
参考代码中的什么?我所看到的只是做同一件事的不同方式。 @DanFriedman 我刚刚发现这个问题试图解决相同的GetSection().Value
为空。为了获得价值,我在上面的代码中使用了GetSection("sectionName").Bind(myConfig)
,并在myConfig
实例属性中填充了配置部分sectionName
值【参考方案3】:
我刚碰到这个。如果您使用完整路径,值就在那里,但我需要将它们自动绑定到配置类。
在我将自动属性访问器添加到我的类的属性后,.Bind(config) 开始工作。即
public class MyAppConfig
public string MyConfigProperty get; set; //this works
public string MyConfigProperty2; //this does not work
【讨论】:
【参考方案4】:这对我有用。
public void ConfigureServices(IServiceCollection services)
services.Configure<MyConfig>(con=> Configuration.GetSection("MyConfig").Bind(con));
【讨论】:
【参考方案5】:我习惯于在我的类中使用字段而不是属性,我遇到的问题和你一样...
原来它们需要是属性,否则它不会完成类的值而是将它们保留为默认值。
基于this MSDN article 一个选项类:
必须是非抽象的,带有公共无参数构造函数。 该类型的所有公共读写属性均已绑定。 字段未绑定。在前面的代码中,Position 没有被绑定。使用 Position 属性,因此在将类绑定到配置提供程序时,不需要在应用中对字符串“Position”进行硬编码。
【讨论】:
以上是关于ASP.NET Core:JSON 配置 GetSection 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core appsettings.json 文件
ASP.NET Core:JSON 配置 GetSection 返回 null
asp.net core 3.1 MVC/WebApi JSON 全局配置
ASP.NET CORE读取appsettings.json的配置