从 appsettings.json 访问键值

问题描述 投票:0回答:3

在 .NET 框架中,我通常将键值管道变量存储在 app.config 文件中,并通过执行以下操作来访问这些键值

<configuration>
    <appSettings>
    <add key="BaseURL" value=""/>
    <add key="Env" value=""/>
    <add key="API_KEY" value=""/>
    </appSettings>
</configuration>
 public static class PipelineVariables
    {
        public static string BaseURL => ConfigurationManager.AppSettings["BaseURL"];
        public static string Environment => ConfigurationManager.AppSettings["Env"];
        public static string APIKEY => ConfigurationManager.AppSettings["API_KEY"];
    }

只是为了好玩,我想使用 Visual Studio Code 和 .Net Core 做一个 API 测试自动化项目

我创建了以下 appsettings.json

{
    "AppSettings": {
          "BaseURL": "",
          "Env": "",
          "API_KEY": ""
      }
  }

只是想知道访问这些键值的推荐方法是什么?我将使用这些值作为管道变量,并将其存储在 Azure 中。我想访问要传递到我的代码中的键值。

***更新:我的工作方式与我在 .NET Framework 项目中的工作方式类似

我希望能够在这些变量上使用 switch 语句,以便在 Azure 中用于 CI/CD,因此为什么我需要单独的变量方法

但是是否有办法简化下面的代码?

      public static string APIKey =>  new ConfigurationBuilder()
                                        .SetBasePath(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName)
                                        .AddJsonFile("appsettings.json", true, true).Build().GetSection("AppSettings:API_KEY")?.Value;

        public static string BaseURL =>  new ConfigurationBuilder()
                                        .SetBasePath(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName)
                                        .AddJsonFile("appsettings.json", true, true).Build().GetSection("AppSettings:BaseURL")?.Value;

c# testing .net-core automation
3个回答
2
投票

这取决于您运行的应用程序类型。您可以通过多种方式解决。

例如在 Dotnet Core API 的启动类中(这通常已经在 API 或 MVC 项目中自动生成):

public IConfiguration Configuration { get; }

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public void ConfigureServices(IServiceCollection services)
{
    string apiKey = Configuration.GetSection("AppSettings:API_KEY")?.Value;
}

但是您也可以在控制台应用程序或不同类型的项目中运行它:

public void Load()
{
   var builder = new ConfigurationBuilder()
   .SetBasePath(Path.Combine("baseDirectory"))
   .AddJsonFile("appsettings.json", true, true)
   .AddEnvironmentVariables();

   var config = builder.Build();
   string apiKey = config["AppSettings:API_KEY"];
}

添加以下 nuget 包以使上面的代码正常工作:

  • Microsoft.扩展.配置
  • Microsoft.Extensions.Configuration.Binder
  • Microsoft.Extensions.Configuration.EnvironmentVariables
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json

***更新:也许这可以帮助您简化代码:

public class PipelineVariables
{
    public string BaseURL { get; set; }
    public string Environment { get; set; }
    public string APIKEY { get; set; }

    private static PipelineVariables pipelineVariables;

    public static PipelineVariables Get()
    {
        if (pipelineVariables == null)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Path.Combine("baseDirectory"))
                .AddJsonFile("appsettings.json", true, true)
                .AddEnvironmentVariables();

            var config = builder.Build();

            pipelineVariables = new PipelineVariables
            {
                APIKEY = config["AppSettings:API_KEY"],
                BaseURL = config["AppSettings:BaseURL"],
                Environment = config["AppSettings:Env"]
            };
        }

        return pipelineVariables;
    }
}

或者更直接的解决方案是通过这种方式获取配置类:

    pipelineVariables = config.GetSection(nameof(PipelineVariables)).Get<PipelineVariables>();

仅类中的变量名称需要与appsettings.json中的相同

appsettings.json 将变成这样:

{
    "PipelineVariables": {
          "BaseURL": "",
          "Environment": "",
          "APIKEY": ""
      }
}

或者你只需更改 C# 中的属性和类名。

获取设置示例:

public void RunPipeline() 
{
     PipelineVariables variables = PipelineVariables.Get();
     Console.WriteLine(variables.BaseURL);
}

0
投票

在 asp .net core api 中你可以使用这个解决方案:

1.使用您的属性创建 AppSettings 基类:

public class AppSettings
{
    public string BaseURL { get; set; }
    public string Env { get; set; }
    public string API_KEY { get; set; }
}

2.您可以从启动 ctor 中的 appsettingjson 获取您的部分:

 var builder = new ConfigurationBuilder()
  .SetBasePath(env.ContentRootPath)
  .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
  .AddEnvironmentVariables();
  this.Configuration = builder.Build();
  var settings = Configuration.GetSection(nameof(AppSettings)).Get<AppSettings>();

3.现在您可以从“设置”实例中的 appsettingjson 获取设置,并且可以在静态字段中使用它


0
投票

我使用控制器类来获取 aspsetting.development 变量 应用程序设置.development.json “开放人工智能”:{ "ApiKey": "sk-" },

    public String _apiKey;
    public IConfiguration Configuration { get; }

    public LangChainController(IConfiguration configuration)
    {
        Configuration = configuration;
        var apiKey = Configuration.GetSection("OpenAI:apiKey");
        _apiKey = apiKey.Value;
    }
© www.soinside.com 2019 - 2024. All rights reserved.