我有一个azure函数.net core 2.2项目。 有一个课程:
public static class A
{
[FunctionName("abc")]
public static async Task RunAsync(
[ServiceBusTrigger("topic1", "sub1", Connection = "ServiceBusConnectionString")] string msg,
[Inject] IInsertOrderAzureSqlFunction functionRunner)
{
//...
}
}
使用ServiceBusTrigger。从Connection
文件获得了local.settings.json
的ServiceBusTrigger。
是否可以将连接字符串放在不同的文件中,例如secret.settings.json
?如何强制ServiceBusTrigger从local.settings.json
以外的其他文件中获取连接参数值
local.settings.json:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"ServiceBusConnectionString": "connectionStringValue1",
"SqlConnection": "connectionStringValue2"
}
}
答案 0 :(得分:0)
您可以利用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"
}
}
使用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;
});
}
}
}
如果属性未设置连接字符串,则触发器将仅使用options.ConnectionString
值。因此,在函数定义中,请确保将ConnectionStringSetting
设置为""
: