首页 / ASP.NET Core / 正文

[ASP.NET Core]ASP.NET Core应用程序开发中如何读取配置文件config.json的配置数据?

1841 发布于: 2018-10-27 读完约需9分钟

问题描述

在ASP.NET Core应用程序开发中,比如有一个名为Config.json的配置文件,配置项为:

{
  "AppSettings": {
        "token": "1234"
    }
}

与ASP.NET 读取配置文件不同,我们不能再使用类似:

System.Configuration.ConfigurationManager.AppSettings["token"];

的方式来读取配置文件中的配置数据了。那么,在ASP.NET Core中应该如何读取配置文件中的数据呢?

方案一

在ASP.NET Core 2.0及以上版本中,我们可以在Startup.cs文件中注册Configuration的实例,然后在需要的地方读取,假如我们有一个名为appsettings.json的配置文件,如下:

{
  "MyConfig": {
   "ApplicationName": "MyApp",
   "Version": "1.0.0"
   }
}

然后定义一个与MyConfig配置节点对应的实体类:

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();
    }
}

如果我们还需要将配置文件注入到控制器中,我们还需要通过Startup.csConfigureServices()方法注册运行时服务,如:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddOptions();
    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()
    {
        var myConfig = config.Value;
        return View();
    }
}

完整的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();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddOptions();
        services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
    }
}

方案二

Startup.cs启动类中注册单例的IConfiguration服务,如下:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
   services.AddSingleton<IConfiguration>(Configuration);
}

控制器调用示例:

public class HomeController : Controller
{
  readonly IConfiguration _configuration;

  public HomeController(IConfiguration configuration)
  {
     _configuration = configuration;
  }

  public IActionResult Index()
  {
    var applicationName = _configuration["MyConfig:ApplicationName"].Value;
    return View();
  }
}

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [ASP.NET Core]ASP.NET Core 如何注册并使用基于同一个接口的不同的实现类?

下一篇: [ASP.NET Core]ASP.NET Core应用程序开发中如何获取用户的客户端IP地址?

本文永久链接码友网 » [ASP.NET Core]ASP.NET Core应用程序开发中如何读取配置文件config.json的配置数据?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册