在我的.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对象中填充值需要什么,以及我应该如何访问属性值。
答案 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
时,内容根路径通常设置为当前目录,但这是从内存中提取的,我可能是错误的。