Configuration.GetSection在.net核心(3.1)中返回null
我正在尝试使用“Configuation.GetSection”获取appSettings.json文件中的信息。但不知何故,我无法得到这个 这是密码 appSettings.Development.json:Configuration.GetSection在.net核心(3.1)中返回null,.net,asp.net-core,configuration,.net,Asp.net Core,Configuration,我正在尝试使用“Configuation.GetSection”获取appSettings.json文件中的信息。但不知何故,我无法得到这个 这是密码 appSettings.Development.json: { "test": { "a": "sdfs" } startup.cs var test = Configuration.GetSection("test"); 我需要运行什么来从appsettings.json文件获取信息 请帮忙。提前感谢请确保配置正确 ap
{
"test": {
"a": "sdfs"
}
startup.cs
var test = Configuration.GetSection("test");
我需要运行什么来从appsettings.json文件获取信息
请帮忙。提前感谢请确保配置正确 appsettings.json
{
...
"Test": {
"Key": "Value"
}
}
Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
...
string v = Configuration["Test:Key:Value"];
...
}
方法返回具有指定子节键的配置子节,它返回指定的ConfigurationSection对象。您可以使用以下方法获取数据:
1.从配置对象获取节。在这个部分中,我们得到了另一个包含该值的部分
var test = Configuration.GetSection("Test").GetSection("a").Value;
2.直接从配置对象获取字符串类型值。我们用“:”分隔嵌套部分
string dbConn2 = Configuration.GetValue<string>("Test:a");
string dbConn2=Configuration.GetValue(“Test:a”);
参考:
我想我找到了上述问题的答案。我不确定我是否正确 我想从“apSettings.json”文件中获取设置并创建一个对象,然后将其与DI一起使用到我的控制器中 为此,我现在用这种方式 内部配置服务方法:
public void ConfigureServices(IServiceCollection services)
{
AppSettings _settings = new AppSettings();
services.AddControllersWithViews();
Configuration.GetSection("AppSettings").Bind(_settings);// bind is necessary
services.AddSingleton(_settings);
}
(注意:AppSettings是自定义类,其属性将在AppSettings.json中提及)
备选案文2:
这是从“appsettings.json”获取信息的第二个选项
services.AddSingleton(Configuration.GetSection(“AppSettings”).Get();
我还面临一个类似的问题,IConfiguration为“null”,因为我放在appsettings.json文件中的键/值对没有被读取。我做了一些实验,发现这种方法可行(在.net core 3.1中):
在应用程序的Program.cs文件中,添加配置文件配置:
var host = new HostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureAppConfiguration(x =>
{
x.SetBasePath(Environment.CurrentDirectory);
x.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
x.AddEnvironmentVariables();
x.Build();
});
webBuilder.UseKestrel(config =>
{
})
.UseIIS()
.UseStartup<Startup>();
}).Build();
host.Run();
var host=new HostBuilder()
.UseContentRoot(目录.GetCurrentDirectory())
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.ConfigureAppConfiguration(x=>
{
x、 SetBasePath(Environment.CurrentDirectory);
x、 AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true);
x、 AddEnvironmentVariables();
x、 Build();
});
webBuilder.UseKestrel(配置=>
{
})
.UseIIS()
.UseStartup();
}).Build();
host.Run();
这不是.net core 3.1的一部分。我可以看到文件正在根属性下加载。我对此很确定。更新了屏幕截图,我可以看到这些文件中的json文件和数据。您好Mateech,我已经正确配置了它。目前,如果我只给出“Test”作为键,它不会出现。但是如果我给出“Test:a”。它给了我价值。奇怪的事情。嗨@DeepakSingh,你可以试着这样做:.GetSection(“test”).GetValue(“a”)
是的,我可以这样做,但它会给我一个值,我想将设置绑定到对象中。然后使用DI使用它。@DeepakSingh这可能会有帮助:
var host = new HostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureAppConfiguration(x =>
{
x.SetBasePath(Environment.CurrentDirectory);
x.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
x.AddEnvironmentVariables();
x.Build();
});
webBuilder.UseKestrel(config =>
{
})
.UseIIS()
.UseStartup<Startup>();
}).Build();
host.Run();