在Controller中访问config.json

时间:2016-12-05 16:31:09

标签: c# dependency-injection asp.net-core asp.net-core-mvc

我正在尝试访问 config.json 文件中的值,但它在我的控制器中返回空值,并且在 Startup.cs 中进行测试时。

在Startup.cs

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("config.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"config.{env.EnvironmentName}.json", optional: true)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

    builder.AddEnvironmentVariables();
    Configuration = builder.Build();      
}

public void ConfigureServices(IServiceCollection services)
{
  /*...

  ...*/
    services.AddOptions();
    services.Configure<AppSettings>(Configuration.GetSection("MicrosoftAzureStorage"));

在控制器

public class TestController : Controller
{
    private string _token;

    public IActionResult Index()
    {
        return View();
    }

    public TestController(IOptions<AppSettings>settings)
    {
        _token = settings.Value.token; //returns Null
    }

AppSettings.cs

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

}

Config.json

{
    "MicrosoftAzureStorage": 
    {
        "AzureStorageConnectionString": "RandomConnectionString"
    }
}

3 个答案:

答案 0 :(得分:0)

您正在添加JsonFiles而不知道它们确实存在。

Restaurant

如果你更改optional:true为false,那么你可能会得到一个例外。由于我缺少一条信息,Project.json中的publishOptions我无法确定。检查publishOptions,您可能需要添加appsettings.json:

.AddJsonFile("config.json", optional: true, reloadOnChange: true)

答案 1 :(得分:0)

属性名称必须与json文件中的键名匹配。请参阅此处的类似示例:Adding loading configuration into inject dependencies in asp.net core

答案 2 :(得分:0)

我在我的应用程序中使用的代码片段。

在startup.cs中

 public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddJsonFile("secondary.json", optional: false, reloadOnChange: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

在控制器方法或辅助类中。

var builder = new ConfigurationBuilder();
builder.AddJsonFile(Directory.GetCurrentDirectory() + "/secondary.json");
var configuration = builder.Build();
var myValue = configuration["MicrosoftAzureStorage:AzureStorageConnectionString"];