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

Posted

技术标签:

【中文标题】Appsetting.json 读取控制器类中键的值,空白?【英文标题】:Appsetting.json read value of key in Controller Class,Comes Blank? 【发布时间】:2018-12-18 02:41:54 【问题描述】:

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

【问题讨论】:

我已经尝试了您的解决方案,它对我来说可以正常工作。您是否检查过 ConfigureServices 步骤中的数据是否正确? 顺便说一句,如果这是从 Visual Studio 生成的 asp.net core 2 项目,则无需再显式创建 ConfigurationBuilder。现在,该功能在IWebHost 上的CreateDefaultBuilder 扩展方法的幕后得到了处理,该方法在Program.cs 中使用。尽管文章谈到了 asp.net core 2 的 beta 版本,但这里有更多信息:andrewlock.net/… 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于Appsetting.json 读取控制器类中键的值,空白?的主要内容,如果未能解决你的问题,请参考以下文章

无法在鼠标事件处理程序中读取 WPF 中键的保持状态 - VMWare Fusion for Mac 上的 Windows 客户机中的行为不一致

解决.net core读取appSetting.json文件中文字符乱码

如何维护 Java 属性文件中键的顺序?

反射应用二(获取xml中键的属性及其值)

此 JSON 对象中键的类型是啥 yourVariable: "nothing yet"

如何更新嵌套字典中键的值?