我们如何在新的asp.net vnext中存储配置数据?

Han*_*h H 7 asp.net-core

我们如何在新的asp.net vnext中存储配置数据?web.config仍然存在(system.web已删除,因此没有任何web.config,但我喜欢它)或使用新的json文件进行配置数据.

Yis*_*zer 5

最佳配置是强类型选项的起点.因此,您在启动时要做的是注册一个Options对象,使用从配置中读取的数据进行设置,然后在其余代码中从DI系统获取.

例:

创建一个Options对象

public class ApplicationOptions
{
    public bool MyOption { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

阅读配置并设置选项对象,然后在DI中注册

public void Configure(IApplicationBuilder app)
{         
    // rest of setup

    var applicationOptions = new ApplicationOptions();
    string myOption;
    if (configuration.TryGet("MyOption", out myOption) &&
            myOption.Equals("True", StringComparison.OrdinalIgnoreCase))
    {
        applicationOptions.MyOption = true;
    }

    // For the scenario above also the code below will work.
    // It is currently limited to desktop (ASPNET50, NET45) only.
    // services.Configure<ApplicationOptions>(configuration);

    services.AddInstance<ApplicationOptions>(applicationOptions);

    // more setup
}
Run Code Online (Sandbox Code Playgroud)

并在您的代码中解决它

public class MyController : Controller
{
    public IActionResult Index(ApplicationOptions options)
    {
        // do something with the options
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:使用任何实用的可重用选项对象,设置它的代码可能会在启动类之外发生.


Kar*_*ick 5

在重大变化(beta 6)中,Microsoft.Framework.ConfigurationModel程序集名称更改为Microsoft.Framework.Configuration 这是修改后的启动类

 public IConfiguration Configuration { get; set; }

public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
     var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath).
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();
     Configuration = configurationBuilder.Build();
}
Run Code Online (Sandbox Code Playgroud)


Son*_*Sam 3

不确定您要存储什么类型的数据,但这对我有用。我创建了此文件 myconfig.json 并以 JSON 格式存储我需要的数据。

这将注册您的配置文件,我在startup.cs页面中添加了此代码。

Configuration = new Configuration()
.AddJsonFile("config.json")
.AddJsonFile("myconfig.json")
.AddEnvironmentVariables();
Run Code Online (Sandbox Code Playgroud)

要从 JSON 文件中获取所需的数据,您需要在代码的任何位置获取此数据。

IConfiguration Configuration = new Configuration().AddJsonFile("myconfig.json");
var jsonNodes = Configuration.Get("SomeJsonNode");
string someJsonString = Configuration.Get("someJsonString");
Run Code Online (Sandbox Code Playgroud)

仅供参考:目前我测试不支持代码 json 数组。不确定他们现在是否解决了这个问题。

  • 没问题,我正在阅读一些博客,他们提到如果您需要应用程序变量,那么这样就很好,但是如果您要存储连接字符串和其他秘密变量,那么如果您使用azure,则最好使用环境变量,门户有一个不错的界面来添加这些。请您是否可以将问题标记为答案 (2认同)