门户中的 Azure 应用服务应用设置未覆盖 appsettings.json 值
Azure app service app settings in the portal are not overriding appsettings.json values
我在 Startup (asp.net core 2.2 proj) 中有以下内容:
public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
Configuration = configuration;
Environment = environment;
new ConfigurationBuilder()
.SetBasePath(Environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true)
.AddEnvironmentVariables()
.Build();
}
public void ConfigureServices(IServiceCollection services)
{
var appSettings = new AppSettings();
Configuration.Bind("appSettings", appSettings);
services.AddSingleton(appSettings);
....
}
我已将值设置为覆盖 appsettings.json 中的所有应用设置值,但我的应用服务仍在使用 appsettings 中的内容,而不是我在门户中放置的内容。根据文档,应用服务的这些门户应用设置应覆盖 appsettings.json 文件并改为使用。我错过了一步吗?
谢谢
编辑:
即使将 Startup 更改为以下内容也不会获取我的 azure 应用程序设置:
public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
Configuration = configuration;
Environment = environment;
Configuration = new ConfigurationBuilder()
.AddConfiguration(configuration)
.SetBasePath(Environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true)
.AddEnvironmentVariables()
.Build();
}
当您想在门户网站上获取 Appsettings 时,您需要使用 AppSettings:Hello
来引用 appsettings.*.json
文件中复杂结构中的变量名称。参考这个article。以下是您可以参考的步骤。
家庭控制器:
private AppSettings AppSettings { get; set; }
public HomeController(IOptions<AppSettings> appSettings)
{
AppSettings = appSettings.Value;
}
public IActionResult Index()
{
ViewBag.Message = AppSettings.Hello;
return View();
}
AppSettings.cs:
public class AppSettings
{
public string Hello { get; set; }
}
Startup.cs:
public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
Configuration = configuration;
Configuration = new ConfigurationBuilder()
.AddConfiguration(configuration)
.SetBasePath(environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables()
.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
}
appsettings.json:
"AppSettings": {
"Hello": "world"
}
在门户网站上:
并且输出:
Windows 和 Linux 容器有点不同。
对于以下设置:
"AppSettings": {
"Hello": "world"
}
Windows 键: AppSettings:Hello
Linux 键: AppSettings__Hello
我在 Startup (asp.net core 2.2 proj) 中有以下内容:
public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
Configuration = configuration;
Environment = environment;
new ConfigurationBuilder()
.SetBasePath(Environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true)
.AddEnvironmentVariables()
.Build();
}
public void ConfigureServices(IServiceCollection services)
{
var appSettings = new AppSettings();
Configuration.Bind("appSettings", appSettings);
services.AddSingleton(appSettings);
....
}
我已将值设置为覆盖 appsettings.json 中的所有应用设置值,但我的应用服务仍在使用 appsettings 中的内容,而不是我在门户中放置的内容。根据文档,应用服务的这些门户应用设置应覆盖 appsettings.json 文件并改为使用。我错过了一步吗?
谢谢
编辑:
即使将 Startup 更改为以下内容也不会获取我的 azure 应用程序设置:
public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
Configuration = configuration;
Environment = environment;
Configuration = new ConfigurationBuilder()
.AddConfiguration(configuration)
.SetBasePath(Environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true)
.AddEnvironmentVariables()
.Build();
}
当您想在门户网站上获取 Appsettings 时,您需要使用 AppSettings:Hello
来引用 appsettings.*.json
文件中复杂结构中的变量名称。参考这个article。以下是您可以参考的步骤。
家庭控制器:
private AppSettings AppSettings { get; set; }
public HomeController(IOptions<AppSettings> appSettings)
{
AppSettings = appSettings.Value;
}
public IActionResult Index()
{
ViewBag.Message = AppSettings.Hello;
return View();
}
AppSettings.cs:
public class AppSettings
{
public string Hello { get; set; }
}
Startup.cs:
public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
Configuration = configuration;
Configuration = new ConfigurationBuilder()
.AddConfiguration(configuration)
.SetBasePath(environment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables()
.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
}
appsettings.json:
"AppSettings": {
"Hello": "world"
}
在门户网站上:
并且输出:
Windows 和 Linux 容器有点不同。
对于以下设置:
"AppSettings": {
"Hello": "world"
}
Windows 键: AppSettings:Hello
Linux 键: AppSettings__Hello