Azure SDK(用于队列)mentions a specific list of parameters that are allowed to be passed into a webjob Function .
例如
您可以通过向方法签名添加参数来获取以下消息属性:DateTimeOffset expirationTime DateTimeOffset insertionTime DateTimeOffset nextVisibleTime string queueTrigger(包含消息文本)string id string popReceipt int dequeueCount如果要直接使用Azure存储API,还可以添加CloudStorageAccount参数 .
我试图找到它在源代码中是如何完成的,因为我想尝试传递我自己的参数 .
任何人都可以解释/链接这是如何可能/完成的?
2 回答
这些参数是特定触发器绑定的 static binding contract 的一部分 . 每个触发器绑定定义其(可能为空)一组"built in"绑定值 . 例如 . here是QueueTrigger的源代码,它定义了这些值 . 只有这个静态 Contract 中的值才能以这种方式绑定为方法参数 .
运行时根据 index time 处的触发器合约验证方法签名,这就是我将其称为静态 Contract 的原因 . 如果无法根据 Contract 解析方法的一个或多个参数,则会发生索引错误 . 在运行时,当触发方法时,使用来自实际触发值(例如,队列消息)的值来填充绑定 Contract .
扩展触发器绑定可以以相同的方式定义 Contract . 例如,here是 Azure Functions 中的HttpTrigger绑定将路由模板中的路由参数添加到其绑定 Contract 的位置 . 例如 . 对于像
products/{category:alpha}/{id:int?}
这样的路径模板,"category"和"id"都会添加到 Contract 中,因此可以直接绑定为方法参数 . 在运行时,绑定数据将使用触发http请求URL中的实际运行时值进行填充 .此 Contract 的定义是触发器绑定作者的责任,并且不能从外部扩展 .
首先,WebJobs SDK Quick Reference列出了 binding parameters 到队列消息的属性,您可以检查它 .
其次,如果您想传递自己的参数,可以尝试create new custom binding or make existing bindings customizable .