在 .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;
这取决于您运行的应用程序类型。您可以通过多种方式解决。
例如在 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 包以使上面的代码正常工作:
***更新:也许这可以帮助您简化代码:
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);
}
在 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 获取设置,并且可以在静态字段中使用它
我使用控制器类来获取 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;
}