我已经在文件 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类中实例化 a。然后,使用选项模式访问各个设置。假设我们有一个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(); } }
请注意, 默认情况下*appsettings.json将在 .NET Core 2.0 中注册。如果需要,我们还可以为每个环境注册一个配置文件。 *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")); } }