.Net 6 config.GetSection() 未按预期运行
.Net 6 config.GetSection() does not act as expected
我正在尝试获取 .net 6 项目中的配置部分,我遇到的问题是 GetSection()
没有按预期运行,它没有 return 该部分,它只是空的。这是一些代码片段:
public static IServiceCollection AddServices(this IServiceCollection services, IConfiguration config)
{
var e = config["EmailConfig"];
var s = config.GetSection("EmailConfig:Server");
IConfigurationSection emailConfigSection = config.GetSection(EmailConfig.Name);
services.Configure<EmailConfig>(emailConfigSection);
return services;
}
EmailConfig.Name
是常数,等于 "EmailConfig"
变量值看起来如下e = null
、s = "server"
和emailConfigSection = null
,那是什么原因呢?为什么我不能得到完整的部分
appsettings.json
如果需要:
{
"EmailConfig": {
"Server": "server",
"Port": 587,
"UseSSL": true,
"Username": "name",
"Password": "password",
"DefaultSender": "sender"
}
}
如果您为 EmailConfig 定义了模型 class,请使用以下代码。
IConfigurationSection emailConfigSection = config.GetSection(EmailConfig.Name).Get<EmailConfig>();
否则您需要从其 属性 名称中获取键值,如下所示:
IConfigurationSection emailConfigSection = config.GetSection(EmailConfig.Name);
var server = emailConfigSection["Server"];
var port = emailConfigSection["Port"];
....
您需要做的:
var e = config.GetSection("EmailConfig");
没有
var e = config["EmailConfig"];
或
这里有一个更详细的方法来获得你想要的结果。
//这在运行时被调用
Startup.cs
Public Class Startup
{
private readonly IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
//set up config
services.AddOptions();
services.Configure<EmailConfig> (_configuration.GetSection("EmailConfig"));
}
}
我们可以创建一个模型来稍后访问我们的配置(EmailConfig)
public class EmailConfig
{
public string Server { get; set; }
public int Port { get; set; }
public bool UseSSL { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string DefaultSender { get; set; }
}
稍后获取您的配置值:
假设我们需要访问服务器
Public class TestApi
{
private readonly EmailConfig _emailConfig
public TestApi(IOptions<EmailConfig) emailConfig)
{
_emailConfig = emailConfig.Value
}
public string ReturnServer
{
var serverName = _emailConfig.Server;
return serverName;
}
}
我正在尝试获取 .net 6 项目中的配置部分,我遇到的问题是 GetSection()
没有按预期运行,它没有 return 该部分,它只是空的。这是一些代码片段:
public static IServiceCollection AddServices(this IServiceCollection services, IConfiguration config)
{
var e = config["EmailConfig"];
var s = config.GetSection("EmailConfig:Server");
IConfigurationSection emailConfigSection = config.GetSection(EmailConfig.Name);
services.Configure<EmailConfig>(emailConfigSection);
return services;
}
EmailConfig.Name
是常数,等于 "EmailConfig"
变量值看起来如下e = null
、s = "server"
和emailConfigSection = null
,那是什么原因呢?为什么我不能得到完整的部分
appsettings.json
如果需要:
{
"EmailConfig": {
"Server": "server",
"Port": 587,
"UseSSL": true,
"Username": "name",
"Password": "password",
"DefaultSender": "sender"
}
}
如果您为 EmailConfig 定义了模型 class,请使用以下代码。
IConfigurationSection emailConfigSection = config.GetSection(EmailConfig.Name).Get<EmailConfig>();
否则您需要从其 属性 名称中获取键值,如下所示:
IConfigurationSection emailConfigSection = config.GetSection(EmailConfig.Name);
var server = emailConfigSection["Server"];
var port = emailConfigSection["Port"];
....
您需要做的:
var e = config.GetSection("EmailConfig");
没有
var e = config["EmailConfig"];
或 这里有一个更详细的方法来获得你想要的结果。
//这在运行时被调用 Startup.cs
Public Class Startup
{
private readonly IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
//set up config
services.AddOptions();
services.Configure<EmailConfig> (_configuration.GetSection("EmailConfig"));
}
}
我们可以创建一个模型来稍后访问我们的配置(EmailConfig)
public class EmailConfig
{
public string Server { get; set; }
public int Port { get; set; }
public bool UseSSL { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string DefaultSender { get; set; }
}
稍后获取您的配置值: 假设我们需要访问服务器
Public class TestApi
{
private readonly EmailConfig _emailConfig
public TestApi(IOptions<EmailConfig) emailConfig)
{
_emailConfig = emailConfig.Value
}
public string ReturnServer
{
var serverName = _emailConfig.Server;
return serverName;
}
}