.NET Core 2.2 - 无法从 Azure AppConfig 获取应用程序配置
.NET Core 2.2 - Unable to get app configuration from Azure AppConfig
我已经创建了一个 Azure AppConfiguration 存储并获取了访问密钥(EndPoint、Id、Secret、ConnectionString)。
现在,我想从我的 .NET Core WebAPI 应用程序中读取来自 Azure 的配置。我尝试了很多在网上找到的方法,但其中 none 有效。
我已经添加了对所需 Nuget 库的引用。
我的 appsettings.json
:
{
"ConnectionString:AppConfig": "Endpoint=https://somewhere.azconfig.io;Id=Hidden;Secret=Hidden",
"EndPoint": "https://somewhere.azconfig.io"
}
在我的 Program.cs
我有:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
{
options.Connect(settings["ConnectionStrings:AppConfig"]);
});
})
.UseStartup<Startup>();
然后在我的 Startup.cs
构造函数中:
public Startup(
IConfiguration configuration, ---> checked this but no Azure config data
IHostingEnvironment hostingEnv
)
{
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
//this.Config = configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(hostingEnv.ContentRootPath)
.AddJsonFile(...)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
这是我阅读配置的地方,但所有值都是 null
public void ConfigureServices(IServiceCollection services)
{
var dbConnection = Configuration.GetSection("MyApp:Key1:Key2").Value; ---> get null
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(dbConnection));
_jwtLifespan = Configuration.GetValue<int>("MyApp:Key3"); ----> get null
_jwtSecretKey = Configuration.GetSection("MyApp:Key4").Value; ----> get null
.....
}
任何人请检查我在这里遗漏了什么,并建议我一个可行的解决方案。非常感谢!
假设这是你的连接设置问题。从您的代码中,您使用 settings["ConnectionStrings:AppConfig"]
来获取连接字符串,但是您使用的是 appsettings.json
。
来自教程:Connect to an app configuration store,如果您想使用 settings["ConnectionStrings:AppConfig"]
,请使用 dotnet user-secrets set ConnectionStrings:AppConfig <your_connection_string>
将您的连接字符串添加到 Secret Manager。
注意:Secret manager仅用于本地测试,当应用部署到Azure应用服务时,使用应用服务中的应用设置连接字符串。
如果你想使用appsettings.json
,你可以试试下面的代码。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var builder = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
var Configuration = builder.Build();
var settings = config.Build();
config.AddAzureAppConfiguration(Configuration.GetSection("ConnectionStrings:AppConfig").Value);
})
.UseStartup<Startup>();
然后我使用教程示例在 AppConfiguration 中显示值。
希望这对您有所帮助,如果您还有其他问题,请随时告诉我。
我已经创建了一个 Azure AppConfiguration 存储并获取了访问密钥(EndPoint、Id、Secret、ConnectionString)。
现在,我想从我的 .NET Core WebAPI 应用程序中读取来自 Azure 的配置。我尝试了很多在网上找到的方法,但其中 none 有效。
我已经添加了对所需 Nuget 库的引用。
我的 appsettings.json
:
{
"ConnectionString:AppConfig": "Endpoint=https://somewhere.azconfig.io;Id=Hidden;Secret=Hidden",
"EndPoint": "https://somewhere.azconfig.io"
}
在我的 Program.cs
我有:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
{
options.Connect(settings["ConnectionStrings:AppConfig"]);
});
})
.UseStartup<Startup>();
然后在我的 Startup.cs
构造函数中:
public Startup(
IConfiguration configuration, ---> checked this but no Azure config data
IHostingEnvironment hostingEnv
)
{
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
//this.Config = configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(hostingEnv.ContentRootPath)
.AddJsonFile(...)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
这是我阅读配置的地方,但所有值都是 null
public void ConfigureServices(IServiceCollection services)
{
var dbConnection = Configuration.GetSection("MyApp:Key1:Key2").Value; ---> get null
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(dbConnection));
_jwtLifespan = Configuration.GetValue<int>("MyApp:Key3"); ----> get null
_jwtSecretKey = Configuration.GetSection("MyApp:Key4").Value; ----> get null
.....
}
任何人请检查我在这里遗漏了什么,并建议我一个可行的解决方案。非常感谢!
假设这是你的连接设置问题。从您的代码中,您使用 settings["ConnectionStrings:AppConfig"]
来获取连接字符串,但是您使用的是 appsettings.json
。
来自教程:Connect to an app configuration store,如果您想使用 settings["ConnectionStrings:AppConfig"]
,请使用 dotnet user-secrets set ConnectionStrings:AppConfig <your_connection_string>
将您的连接字符串添加到 Secret Manager。
注意:Secret manager仅用于本地测试,当应用部署到Azure应用服务时,使用应用服务中的应用设置连接字符串。
如果你想使用appsettings.json
,你可以试试下面的代码。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var builder = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
var Configuration = builder.Build();
var settings = config.Build();
config.AddAzureAppConfiguration(Configuration.GetSection("ConnectionStrings:AppConfig").Value);
})
.UseStartup<Startup>();
然后我使用教程示例在 AppConfiguration 中显示值。
希望这对您有所帮助,如果您还有其他问题,请随时告诉我。