Appsetting.json读取控制器类中键的值,是否为空白?

时间:2018-07-10 09:47:23

标签: c# .net asp.net-core .net-core asp.net-core-webapi

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

appsettings.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对象中填充值需要什么,以及我应该如何访问属性值。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我认为问题可能与.SetBasePath(env.ContentRootPath)有关,我相信它将返回项目中的wwwroot文件夹,而不是appsettings.json所在的项目根目录。

如果将其更改为.SetBasePath(Directory.GetCurrentDirectory()),它将有望开始工作。

我相信在asp.net core 1中,创建WebHostBuilder时,内容根路径通常设置为当前目录,但这是从内存中提取的,我可能是错误的。