首页 > 解决方案 > Appsetting.json 读取控制器类中键的值,空白?

问题描述

在我的 .net core 2.0 应用程序中,我创建了一个 appsettings.json 文件来存储应用程序的配置详细信息。

应用设置.json

{
  "RestCalls": {
    "SFGetAllAccounts": "https://example.com",
    "SFGetIndividualAccount": "https://example.com",
    "B6GetAccount": "https://example.com"
  }
}

映射值的等效 .Net 类

public class AppConfiguration
{
    public string SFGetAllAccounts { get; set; }
    public string SFGetIndividualAccount { get; set; }
    public string B6GetAccount { get; set; }
}

Startup.cs添加了以下配置

public IConfiguration 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.AddCors();
    services.AddMvc();
    services.Configure<AppConfiguration>(Configuration.GetSection("RestCalls"));
}

在 Controller 类中,当在 _configuration 对象中调用 Post 方法时,初始化并为空,因此此类 AppConfiguration 的所有属性都为空。

public class HomeController : Controller
{
    private readonly IOptions<AppConfiguration> _configuration;
    public HomeController(IOptions<AppConfiguration> config)
    {
        this._configuration = config;
    }

    public IActionResult Post([FromBody]LoginModel model)
    {
        RESTCreatorHelper r = new RESTCreatorHelper(_configuration);
    }
}

我已经在 SO 上搜索了很多关于这件事的内容,并尝试了很多方法似乎没有任何效果。显然我遗漏了一些东西,你能建议在 _configuration 对象中填充值需要什么,以及我应该如何访问属性值。

标签: c#.netasp.net-core.net-coreasp.net-core-webapi

解决方案


问题是文件位于文件夹中,无法找到该文件。所以我更正了路径

var builder = 
    new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("ConfigurationFiles/AppSettings.json", optional: true, reloadOnChange: true);

并且还添加了正确绑定值的 AddOptions。

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

推荐阅读