一尘不染

如何从ASP.NET Core中的.json文件读取AppSettings值

c#

我已经在文件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中做到这一点?


阅读 306

收藏
2020-05-19

共1个答案

一尘不染

这有些曲折。我已修改此答案以使其与 ASP.NET Core 2.0 保持最新(截至2018年2月26日)。

这主要来自官方文档

若要使用ASP.NET应用程序中的设置,建议仅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

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如果需要,我们还可以为每个环境注册一个配置文件。

如果要将配置注入控制器,则需要在运行时注册它。我们通过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"));
    }
}
2020-05-19