c# - Azure 函数 local.settings.json 在 appsettings.json 中表示 ServiceBusTrigger
问题描述
我目前有一个使用 ServiceBusTrigger 绑定的天蓝色函数
[ServiceBusTrigger("%TopicName%", "%SubscripionName%", Connection = "MyConnection")]
string catclogueEventMsgs, ILogger log, ExecutionContext context)
它使用这个 local.settings.json 文件
"Values": {
…
"MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
"SubscriptionName": "testsubscriptionName"
"TopicName": "testtopicName",
}
我如何在 appsettings.json 文件中表示这一点。会像下面这样吗?
"Values": {
"MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
"SubscriptionName": "testsubscriptionName"
"TopicName": "testtopicName",
}
除了使用“Values”对象之外,我还可以使用如下所示的“MySubs”对象吗?
"MySubs": {
"MyConnection": "Endpoint=sb://testxxxxxxxxxxxxxxxxxx
"SubscriptionName": "testsubscriptionName"
"TopicName": "testtopicName",
}
如果可以使用上述设置,我如何在 ServiceBusTrigger 绑定中表示它?我会把它改成这个吗?
[ServiceBusTrigger("%MySubs.TopicName%", "%MySubs.SubscripionName%", Connection = "MySubs.MyConnection")]
string catclogueEventMsgs, ILogger log, ExecutionContext context)
解决方案
您确实可以读取Values
数组外的设置,如下所示:
WeatherApiConfig.cs
public class WeatherApiConfig
{
public string WeatherApiUrl { get; set; }
public string WeatherApiKey { get; set; }
}
Azure Functions V2 的新增功能,我们有一种适当的方式来处理 DI,如下所示:
启动.cs
[assembly: FunctionsStartup(typeof(BlazingDemo.Api.Startup))]
namespace BlazingDemo.Api
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var apiConfig = new WeatherApiConfig();
config.Bind(nameof(WeatherApiConfig), apiConfig);
builder.Services.AddSingleton(apiConfig);
builder.Services.AddHttpClient();
}
}
}
Local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
},
"WeatherApiConfig": {
"WeatherApiUrl": "http://api.openweathermap.org/data/2.5/weather",
"WeatherApiKey": "**removed**"
}
}
注意:对我来说关键是添加
.SetBasePath(Directory.GetCurrentDirectory())
,Startup.cs
因为没有它就找不到文件。
在生产中,我使用函数应用的Application Settings
部分来配置这两个属性,如下所示:
推荐阅读
- git - 如何更改我推送到的 git 存储库
- java - Spring Boot 应用看不到配置文件
- javascript - 我正在尝试在 wordpress 中学习 ajax 以删除表格条目,但在放置时感到困惑
- javascript - 我无法在 JS 上为数组设置值 - TypeError:无法将未定义或 null 转换为对象
- c# - C# FORM 复制程序由于 RAM 使用过多而崩溃
- reactjs - 在一个 React 组件中切换两种不同的 props 类型
- python - 如何在不显式读取的情况下将二进制流缓冲区写入 Python 3 中的文件?
- angular - Angular:Angular 是否支持同一个 DOM 元素上的两个自定义指令?
- google-chrome - Chrome 后台同步事件未检测到我离线并立即启动
- node.js - 无法在 Node.js Docker 容器中发送哨兵事件