.net core Azure函数:从local.settings.json以外的其他文件获取连接字符串
我有一个azure functions.net core 2.2项目。 有一类:.net core Azure函数:从local.settings.json以外的其他文件获取连接字符串,.net-core,azure-functions,.net Core,Azure Functions,我有一个azure functions.net core 2.2项目。 有一类: public static class A { [FunctionName("abc")] public static async Task RunAsync( [ServiceBusTrigger("topic1", "sub1", Connection = "ServiceBusConnectionString")] string msg,
public static class A
{
[FunctionName("abc")]
public static async Task RunAsync(
[ServiceBusTrigger("topic1", "sub1", Connection = "ServiceBusConnectionString")] string msg,
[Inject] IInsertOrderAzureSqlFunction functionRunner)
{
//...
}
}
它使用ServiceBustiggerlocal.settings.json
文件获得是否可以将连接字符串放在不同的文件中,例如
secret.settings.json
?如何强制ServiceBustigger从本地.settings.json以外的其他文件获取连接参数值
local.settings.json:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"ServiceBusConnectionString": "connectionStringValue1",
"SqlConnection": "connectionStringValue2"
}
}
您可以使用
ConfigurationBuilder
添加多个secrets.settings.json
或prod.settings.json
等并动态加载它。下面是示例代码
假设您有这样一个secrets.settings.json
{
"ConnectionStrings": {
"SqlConnectionString": "server=myddatabaseserver;user=tom;password=123;"
},
"MyCustomStringSetting": "Override Some Name",
"MailSettings": {
"PrivateKey": "xYasdf5678asjifSDFGhasn1234sDGFHg"
}
}
更新1
使用IWebJobsStartup
使用依赖项注入,您可以这样做
[assembly: WebJobsStartup(typeof(Startup))]
namespace MyFunctionApp
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddJsonFile("secret.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var myString = config["MyCustomStringSetting"];
builder.Services.PostConfigure<ServiceBusAttribute(serviceBusOptions =>
{
serviceBusOptions.Connection = myString;
});
}
}
}
[程序集:WebJobsStartup(类型(启动))]
名称空间MyFunctionApp
{
公共类启动:IWebJobsStartup
{
公共void配置(IWebJobsBuilder生成器)
{
var config=new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile(“local.settings.json”,可选:true,重载更改:true)
.AddJsonFile(“secret.settings.json”,可选:true,重载更改:true)
.AddenEnvironmentVariables()
.Build();
var myString=config[“MyCustomStringSetting”];
builder.Services.PostConfigure
{
serviceBusOptions.Connection=myString;
});
}
}
}
如果属性未设置连接字符串,则触发器将仅返回到使用
选项.ConnectionString
值。因此,在函数定义中,确保将连接字符串设置设置为”
:分配给连接的值必须是常量。该值还表示来自local.settings.json
的设置名称,因此,如果我试图将连接字符串分配给connection
属性,则该设置将不起作用。@ael更新了我的答案,请尝试。它应该可以工作,我不知道它是否是故意的,但是有ServiceBusAttribute
而不是servicebustriggeratAttribute
?下面是代码行:postconfigure使其工作,但是,我通过添加以下行替换了根配置:“builder.Services.AddSingleton(config);”。您也不需要后配置。