将自定义部分添加到.NET Core local.settings.json

我正在编写我的第一个Azure函数(基于.NET Core 2.x),并且正在努力使用自定义映射表扩展应用程序设置。

我有一个文件local.settings.json,并且我尝试通过“自定义”配置节扩展该文件,该节包含一些“键/值”对-像这样:

{
  "IsEncrypted": false,"Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",... (standard config settings) ...
  },... (more default sections,like "Host" and "ConnectionStrings")
  "MappingTable" : {
    "01" : "Value1","02" : "Value2","03" : "Value3","else" : "Value4"
  }
}

我通过构造函数注入将IConfiguration注入到我的worker类中,并且对于“值”部分中存储的“基本”默认值也可以正常工作

public MyWorker(IConfiguration config)
{
    _config = config;

    string runtime = _config["FUNCTIONS_WORKER_RUNTIME"];  // works just fine

    // this also works fine - the "customSection" object is filled
    var customSection = _config.GetSection("MappingTable");

    // but now this doesn't return any values
    var children = customSection.getchildren();

    // and trying to access like this also only returns "null"
    var mapping = customSection["01"];
}

我被困在这里-我发现的所有博客文章和文章似乎都表明是这样做的-但就我而言,这似乎行不通。我在这里想念什么?我对完整的.NET Framework配置系统非常熟悉-但这对我来说是新的,还没有真正意义……

我还尝试将整个MappingTable部分移至appSettings.json-但这并没有什么改变,尝试访问我的自定义项时,我仍然只返回null配置部分的值。...

谢谢!

更新:使用标准的ASP.NET Core 2.1 Web应用程序,所有建议的完成此工作的方式都很好-但是在Azure功能中,它不起作用。似乎 Azure函数中的代码与常规.NET Core代码库相比对配置的处理不同 ...

tldtc007 回答:将自定义部分添加到.NET Core local.settings.json

我使用.net core 3.0做过类似的事情

local.settings.json

{
  "AppSettings":{
    "MappingTable" : {
      "01" : "Value1"       
    }
  }
}

阅读应用程序设置:

private void AppSettings()
{
   var config = new ConfigurationBuilder()
                        .SetBasePath(Directory.GetCurrentDirectory())
                        .AddJsonFile("local.settings.json",optional: true,reloadOnChange: true)
                        .AddEnvironmentVariables()
                        .Build();

   var 01 = config["AppSettings:MappingTable:01"];
}

在Azure门户中,您需要将此添加为应用程序设置。 在您的Function App中-> 配置-Application Settings-> New Application设置 enter image description here

Name:AppSettings:MappingTable:01
Value:Value1
,

A R G H! ! !

我知道这-一个愚蠢的小错误-但后果相当严重.....

在我的启动课程中,我有以下代码(以及更多):

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddHttpClient();

        var config = new ConfigurationBuilder()
            .SetBasePath(Environment.CurrentDirectory)
            .AddJsonFile("local.settings.json",reloadOnChange: true)
            .AddJsonFile("appsettings.json",reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();
        .....
    }
}    

但是缺少上面的.Build()调用之后的这一行代码:

        builder.Services.AddSingleton<IConfiguration>(config);

不知何故,Values的{​​{1}}部分中的设置已经存在并且可以访问,但是任何自定义配置部分都没有。

添加这一行解决了我的问题-现在,我可以轻松地从local.settings.json(或MappingTable)文件中读取local.settings.json,并在我的代码中使用它。

本文链接:https://www.f2er.com/3103581.html

大家都在问