我正在编写一个基本的应用程序来学习ASP.NET 5.我觉得很困惑的一个领域是配置.在ASP.NET 5之前,我可以执行以下操作:
var settingValue = ConfigurationManager.AppSettings["SomeKey"];
Run Code Online (Sandbox Code Playgroud)
我会在我的代码中散布各种代码.现在,在vNext世界中,我有一个如下所示的config.json文件:
config.json
{
"AppSettings": {
"SomeKey":"SomeValue"
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Startup.cs中,我有以下内容: Startup.cs
public IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment environment)
{
Configuration = new Configuration()
.AddJsonFile("config.json");
}
Run Code Online (Sandbox Code Playgroud)
从那里,我完全难过.我在/src/Website/Code/Models/MyClass.cs中有MyClass.cs.
MyClass.cs
public class MyClass
{
public string DoSomething()
{
var result = string.Empty;
var keyValue = string.Empty; // TODO: What do I do here? How do I get the value of "AppSettings:SomeKey"?
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
如何获得"AppSettings:SomeKey"的值?
我使用VSCode和NetCore 1.1.1.
我需要在appsetting.json中存储几个数据路径,让我的控制台应用程序知道在哪里查找其数据.
这是appsettings.json文件的摘录:
{
"ConnectionStrings":
{
"Database": "Filename=./Data/Database/securities_master.db"
},
"Data":
{
"Folders": ["E:/Data/Folder1/","E:/Data/Folder2/"]
}
}
Run Code Online (Sandbox Code Playgroud)
我加载配置文件,我希望存储在变量中的"文件夹"数组:
const string APP_SETTINGS_SECTION = "Data";
const string APP_SETTINGS_KEY = "Folders";
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
var configuration = builder.Build();
var dataFolders = configuration.GetSection(APP_SETTINGS_SECTION)[APP_SETTINGS_KEY];
Run Code Online (Sandbox Code Playgroud)
dataFolders是NULL!
如果我将appsetting.json更改为仅指向这样的单个目录,则一切正常:
{
"ConnectionStrings":
{
"Database": "Filename=./Data/Database/securities_master.db"
},
"Data":
{
"Folders": "E:/Data/Folder1/"
}
}
Run Code Online (Sandbox Code Playgroud)
dataFolder=" E:/ Data/Folder1 / "
所以问题似乎是它不喜欢字符串数组,但对我来说它看起来像一个有效的Json字符串数组.我应该如何修改我的appsettings(或我的C#代码)来解决这个问题?
假设我有一个config.json这样的:
{
"CustomSection": {
"A": 1,
"B": 2
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用IConfiguration对象来获取特定设置,即 ,configuration.Get("CustomSection:A")但是我可以获取整个层次结构(任何类型 - 即使是原始字符串也可以)?当我尝试时configuration.Get("CustomSection"),我得到了null结果,所以我认为默认情况下不支持。
我的用例是一次获取整个配置字典,而不必获取每个单独的设置 - 在编译时可能不知道某些属性。
asp.net mvc 6 beta5
我曾尝试使用config.json来激活\ disactive日志记录
public IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
.AddJsonFile("config.json")
.AddEnvironmentVariables();
Configuration = configurationBuilder.Build();
DBContext.ConnectionString = Configuration.Get("Data:DefaultConnection:ConnectionString");
}
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.Configure<AppSettings>(Configuration.GetConfigurationSection("AppSettings"));
}
// Configure is called after ConfigureServices is called.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory)
{
// that line cause NullReferenceException
AppSettings settings = ConfigurationBinder.Bind<AppSettings>(Configuration);
if (settings.Log.IsActive)
{
................
}
Run Code Online (Sandbox Code Playgroud)
ASP.NET 5(vNext)中的示例- 获取配置设置 和http://perezgb.com/2015/07/04/aspnet-5-typed-settings-with-the-configurationbinder/
是否有其他方法可以获得"configure"方法中AppSettings的实例?我需要输入对象.