【问题标题】:Can't Read Setting out of JSON file in Startup.cs无法读取 Startup.cs 中 JSON 文件的设置
【发布时间】:2016-02-23 09:48:39
【问题描述】:

在我的 Startup.cs 文件中,我有以下内容:

public Startup(IHostingEnvironment env)
{
    // Set up configuration sources.
    var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

public IConfigurationRoot Configuration { get; set; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{

    var fooValue = Configuration.Get("foo");
    // Add framework services.
    services.AddMvc();
}

在我的 appsettings.json 文件中,我有 { "foo": "bar" }

稍后在我的 Startup 课程中,我有:

public void ConfigureServices(IServiceCollection services)
{

    var fooValue = Configuration.Get("foo");
    // Add framework services.
    services.AddMvc();
}

我尝试通过在其上设置断点(带有 ASP.NET 5 扩展的 VS2015)来观察 Locals 调试器中 fooValue 的值变化,但是当我跳过它时出现以下错误:

Microsoft.Extensions.Configuration.Binder.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

附加信息:无法创建“System.String”类型的实例,因为它缺少公共无参数构造函数。

我正在关注MVA Configuring Data at 18m 53s

我已经尝试像示例中那样创建一个 config.json 文件,但模板似乎已更改,并且无论如何都没有帮助。

应该允许我像这样从 .json 文件中获取配置信息吗?

【问题讨论】:

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


【解决方案1】:

只是为了在这里得到一个完整的答案。您所做的一切都是正确的,但是您选择的 ConigurationBinder.Get 的重载需要配置节名称而不是键。

public static T Get<T>(this IConfiguration configuration, T defaultValue)

但是您可以使用不同的重载:

public static T Get<T>(this IConfiguration configuration, string key)

所以你的代码应该是这样的:

public void ConfigureServices(IServiceCollection services)
{    
    var fooValue = Configuration.Get<string>("foo");
    // Add framework services.
    services.AddMvc();
}

我认为文档还不是很清楚,所以我主要使用反射器或 GitHub 源代码来找出 API 实际在做什么。这是该软件包的public repository 的链接。

【讨论】:

  • 谢谢。对我来说,一个长期目标必须是如何更好地理解公开的例子。
【解决方案2】:

回答您的问题:是的,您可以从 .json 文件中获取配置,只需更改

Configuration.Get("foo");

到:

Configuration.Get<string>("foo");

你将能够阅读它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多