Azure函数队列触发连接-我可以通过变量或特定的Azure应用程序配置设置此连接吗?
简单地说,我有以下几点:Azure函数队列触发连接-我可以通过变量或特定的Azure应用程序配置设置此连接吗?,azure,azure-functions,azure-app-configuration,Azure,Azure Functions,Azure App Configuration,简单地说,我有以下几点: public async Task Run([QueueTrigger("order-new", Connection = "AzureWebJobsStorage")]string myQueueItem, ILogger log) 有没有什么方法可以让我这样做: public async Task Run([QueueTrigger("order-new", Connection = _connecti
public async Task Run([QueueTrigger("order-new", Connection = "AzureWebJobsStorage")]string myQueueItem, ILogger log)
有没有什么方法可以让我这样做:
public async Task Run([QueueTrigger("order-new", Connection = _connection)]string myQueueItem, ILogger log)
连接作为变量传入的位置?我可以访问构造函数中的值,它来自Azure应用程序配置服务。我只是尽量不必在多个地方更改设置。多谢各位
更新:
实际上,我已经找到了一种方法,可以将实际字符串而不是变量放入方法参数中,但是连接输入将其解释为它需要查找的变量,而不是连接本身的文本字符串
更新2:
我想我已经弄明白了,当我有机会@baum mit augen实际上删除了引导我到那里的帖子时,我会把它写下来
我可以从变量或特定的Azure应用程序中设置它吗
配置
不,它实际上从环境变量中获取值
但如果确实有必要,您可以将所需的配置导入到环境变量中
根据您的问题描述,您似乎是在Visual Studio上开发的,所以在本地开发时只需在local.settings.json中设置。并使用以下工具轻松上传设置:
确保将应用程序设置设置为Azure应用程序配置连接字符串,在本例中,我将其命名为APP\u CONFIG\u connection 要在Visual Studio中执行此操作,请在项目上单击鼠标右键,然后单击“属性”: 在Azure功能中,它将位于配置部分: 安装所需的软件包: 安装软件包Microsoft.Extensions.Configuration.AzureAppConfiguration-版本4.2.1 如果Startup.cs文件不存在,请添加该文件:
using System;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
class Startup : FunctionsStartup
{
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
string cs = Environment.GetEnvironmentVariable("APP_CONFIG_CONNECTION");
builder.ConfigurationBuilder.AddAzureAppConfiguration(cs);
}
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddAzureAppConfiguration();
}
}
}
现在,在函数中,可以通过路径引用配置变量
例子
[return: Queue(queueName: "%Some:Path:QueueName%", Connection = "Some:Path:ConnectionString")]
或
BOOM,在连接字符串之外的项目中没有设置。请注意,queueName变量被“%”包围,因为它是一个文本,而连接不是因为它是一个变量。您还可以通过依赖项注入访问其他变量:
private readonly SomeApiClient _api;
public My_QueueTrigger(IConfiguration configuration)
{
var config = configuration.Get<AppSettings>();
_api = new SomeApiClient (new
{
ApiUrl = config.ApiUrl,
AuthUrl = config.AuthUrl,
ClientId = config.ClientId,
ClientSecret = config.ClientSecret,
Roles = new[] { ApiRole.FullAccess }
});
}
希望这对其他人有用。我很难理解你的问题。通常,您注入IConfiguration,它会为您提供azure应用程序配置。但是你想通过变量来实现它吗?不一定,据我所知,我需要将它放入'Run'方法Connection=xxx的参数构造函数中,如果有其他方法来指定它,那也可以!我试图实现的全部目标是不在项目本身中设置任何本地设置。我希望所有设置都在Azure应用程序配置服务上。我想我可以在部署作业时编写替换脚本,但必须有更好的方法,对吗?这是不正确的信息,可能如我的解决方案所示
private readonly SomeApiClient _api;
public My_QueueTrigger(IConfiguration configuration)
{
var config = configuration.Get<AppSettings>();
_api = new SomeApiClient (new
{
ApiUrl = config.ApiUrl,
AuthUrl = config.AuthUrl,
ClientId = config.ClientId,
ClientSecret = config.ClientSecret,
Roles = new[] { ApiRole.FullAccess }
});
}