我已经将Web作业编写为.NET Core Console应用程序(exe),它有appsettings.json。
如何在Azure中配置WebJob?基本上我想与Web应用程序共享一些设置,例如连接字符串,这是通过App Service的应用程序设置配置的。
答案 0 :(得分:1)
从ASP.NET Core获取这些设置的方法是访问注入的环境变量。
因此我们必须将这些环境变量加载到Startup.cs文件中的Configuration中:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
appsettings.json文件的一个例子是:
如果您想获取appsettings.json文件中定义的名为“Redis”的连接字符串,我们可以通过配置获取它:
Configuration["ConnectionStrings:Redis"]
。
您可以在Azure应用程序的webapp中设置此配置:
此外,我们可以使用Configuration.GetConnectionString("Redis")
从appsettings.json文件中获取开发连接字符串,并在Azure中部署并运行应用程序时,覆盖它在Web App的“连接字符串”面板中设置另一个字符串。
有关详细信息,请参阅此article。
答案 1 :(得分:1)
我更喜欢通过在我的本地项目中设置launchSettings.json
中的环境变量并在Azure App Service设置中设置相同的环境变量来实现此目的。
优点是您的应用程序始终使用环境变量,更重要的是,您的源代码管理中没有任何密钥,因为您不必部署launchSettings.json
。
答案 2 :(得分:0)
CloudConfigurationManager类非常适合这种情况,因为它将从中读取配置设置 所有环境(Web作业配置和基本应用程序配置)。
Install-Package Microsoft.WindowsAzure.ConfigurationManager
然后像这样使用它
var val = CloudConfigurationManager.GetSetting("your_appsetting_key");
唯一的缺点是只能从appSettings部分读取而不能使用CloudConfigurationManager读取connectionstring部分。 如果您想在Web作业和基本Web应用程序之间共享连接,那么我将使用唯一键在Web应用程序的appsetting部分中定义connectionstring。