c# - 从 appsettings.json 访问键值
问题描述
在 .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 包以使上述代码工作:
- Microsoft.Extensions.Configuration
- 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);
}
推荐阅读
- javascript - 无法使用 Test Cafe 播放视频,Click 事件什么也不做
- r - R Knitr 功能缺失
- nlp - Microsoft LUIS:共指
- javascript - 位置粘性不起作用在容器内使用
- sql - SQL SERVER 为两个相似的查询生成不同且未优化的执行计划
- qt5 - 无法将 webkitwidgets 库添加到我的 qt5 项目
- android - json 数组在我的响应中不可用,我正在尝试使用改造将我的响应保存在模型类中
- python - 如何继续执行调用失败的 C++ 函数的 Python 模块?
- angular - 如何在 Angular 7/8/9 上仅从另一个元素的两侧绑定拖放元素?
- zk - 如何禁用 ZK 日历中的事件重影?