不确定我在这里错过了什么,但我无法从我的应用程序设置中获得值。Json在我的。net核心应用程序。我有我的appsettings。json:

{
    "AppSettings": {
        "Version": "One"
    }
}

启动:

public class Startup
{
    private IConfigurationRoot _configuration;
    public Startup(IHostingEnvironment env)
    {
        _configuration = new ConfigurationBuilder()
    }
    public void ConfigureServices(IServiceCollection services)
    {
      //Here I setup to read appsettings        
      services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
    }
}

模型:

public class AppSettings
{
    public string Version{ get; set; }
}

控制器:

public class HomeController : Controller
{
    private readonly AppSettings _mySettings;

    public HomeController(IOptions<AppSettings> settings)
    {
        //This is always null
        _mySettings = settings.Value;
    }
}

_mySettings总是空的。我是不是遗漏了什么?


当前回答

在Startup类的构造函数中,可以访问appsettings。json和使用注入的IConfiguration对象的许多其他设置:

Startup.cs构造函数

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;

        //here you go
        var myvalue = Configuration["Grandfather:Father:Child"];

    }

public IConfiguration Configuration { get; }

json的内容

  {
  "Grandfather": {
    "Father": {
      "Child": "myvalue"
    }
  }

其他回答

亚比谢克的回答是:

如果你想将值导入到静态类中,那么只需使用(ReSharper推荐):

static IConfiguration conf = (JsonConfigurationExtensions.AddJsonFile(new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()), "appsettings.json").Build());

private static string AuthorizationServiceURL { get; } = conf["ServiceUrls:AuthorizationUrl"];

// appsettings.json
{
  "ServiceUrls": {
    "AuthorizationUrl": "https://example.com/authorize"
  } 
}

像这样在这里添加所需的键。在这种情况下,它的securecookie:

在startup.cs中添加构造函数 公共启动(IConfiguration配置) { 配置=配置; } public IConfiguration Configuration {get;} 使用Configuration[" secucookie "]访问设置

再加上David Liang对Core 2.0的回答——

appsettings。json文件链接到ASPNETCORE_ENVIRONMENT变量。

ASPNETCORE_ENVIRONMENT可以设置为任何值,但是框架支持三个值:Development、Staging和Production。如果没有设置ASPNETCORE_ENVIRONMENT,它将默认为Production。

对于这三个值,这些appsettings.ASPNETCORE_ENVIRONMENT。json文件支持开箱即用- appsettings.Staging。appsettings.Development.json和appsettings.Production.json

以上三个应用程序设置json文件可用于配置多个环境。

示例- appsettings.Staging.json

{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "MyConfig": "My Config Value for staging."
}

使用Configuration["config_var"]检索任何配置值。

public class Startup
{
    public Startup(IHostingEnvironment env, IConfiguration config)
    {
        Environment = env;
        Configuration = config;
        var myconfig = Configuration["MyConfig"];
    }

    public IConfiguration Configuration { get; }
    public IHostingEnvironment Environment { get; }
}

我只是创建了一个静态类,并在Startup.cs中设置了一个配置变量

public static class GlobalConfig { 
    public static IConfiguration config { get; set; } 
}

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        GlobalConfig.config = configuration;

    }
}

然后在任何地方使用它:

var keyVal = GlobalConfig.config["key"];

似乎是访问配置文件并使其在任何地方可用的最简单的方法。

如果以上解决方案没有帮助,您可以参考此链接。对我来说,命名选项支持使用IConfigureNamedOptions工作!你可能还会发现其他方法可能对你有帮助。

使用IConfigureNamedOptions支持命名选项