我已经在文件appsettings / Config .json中设置了我的AppSettings数据,如下所示:
{ "AppSettings": { "token": "1234" } }
我已经在网上搜索了如何从.json文件读取AppSettings值的信息,但没有任何有用的信息。
我试过了:
var configuration = new Configuration(); var appSettings = configuration.Get("AppSettings"); // null var token = configuration.Get("token"); // null
我知道使用ASP.NET 4.0可以做到这一点:
System.Configuration.ConfigurationManager.AppSettings["token"];
但是如何在ASP.NET Core中做到这一点?
这有些曲折。我已修改此答案以使其与 ASP.NET Core 2.0 保持最新(截至2018年2月26日)。
这主要来自官方文档:
若要使用ASP.NET应用程序中的设置,建议仅Configuration在应用程序的Startup类中实例化一个。然后,使用“选项”模式访问各个设置。假设我们有一个appsettings.json看起来像这样的文件:
Configuration
Startup
appsettings.json
{ "MyConfig": { "ApplicationName": "MyApp", "Version": "1.0.0" } }
我们有一个POCO对象代表配置:
public class MyConfig { public string ApplicationName { get; set; } public int Version { get; set; } }
现在,我们在中构建配置Startup.cs:
Startup.cs
public class Startup { public IConfigurationRoot Configuration { get; set; } public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); Configuration = builder.Build(); } }
请注意, 默认情况下将 在.NET Core 2.0中appsettings.json进行 注册 。appsettings.{Environment}.json如果需要,我们还可以为每个环境注册一个配置文件。
appsettings.{Environment}.json
如果要将配置注入控制器,则需要在运行时注册它。我们通过Startup.ConfigureServices:
Startup.ConfigureServices
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<MyConfig>(Configuration.GetSection("MyConfig")); }
我们像这样注入它:
public class HomeController : Controller { private readonly IOptions<MyConfig> config; public HomeController(IOptions<MyConfig> config) { this.config = config; } // GET: /<controller>/ public IActionResult Index() => View(config.Value); }
全Startup类:
public class Startup { public IConfigurationRoot Configuration { get; set; } public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); Configuration = builder.Build(); } 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<MyConfig>(Configuration.GetSection("MyConfig")); } }