小编典典

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

all

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


阅读 109

收藏
2022-03-31

共1个答案

小编典典

这经历了一些波折。我已将此答案修改为最新的 ASP.NET Core 2.0 (截至 2018 年 2 月 26 日)。

这主要取自官方文档

要使用 ASP.NET 应用程序中的设置,建议您只Configuration在应用程序的Startup类中实例化
a。然后,使用选项模式访问各个设置。假设我们有一个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();
    }
}

请注意, 默认情况下*appsettings.json将在 .NET Core 2.0 中注册。如果需要,我们还可以为每个环境注册一个配置文件。
*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"));
    }
}
2022-03-31