7

我正在创建一个部署 Web 应用程序(一个 Mvc Api)和一个逻辑应用程序的 ARM 模板。

我试图在逻辑应用程序中定义一个 HTTP 操作,以便它动态连接 Api 的基本 Uri 以及使用splitOnand的当前项目的属性@triggerBody()。基本 Uri 本身是从 ARM 模板中的一组参数连接到一个变量中的variables('hockeyAppAPISettings').Uri

这是动作定义的相关片段:

"actionName": {
  "conditions": [ ],
  "inputs": {
    "authentication": {
      "audience": "[variables('apiSettings').Authentication.Audience]",
      "clientId": "[variables('apiSettings').Authentication.ClientId]",
      "secret": "[variables('apiSettings').Authentication.Secret]",
      "tenant": "[variables('apiSettings').Authentication.Tenant]",
      "type": "ActiveDirectoryOAuth"
    },
    "method": "patch",
    "uri": "[concat(variables('apiSettings').Uri, '/@{triggerBody()['Id']}/ScanningInProgress')]"
    //"uri": "[concat(variables('apiSettings').Uri, '//@{triggerBody()[/'Id/']}//ScanningInProgress')]"
    //"uri": "[concat(variables('apiSettings').Uri, '//@@{triggerBody()[/'Id/']}//ScanningInProgress')]"
  },
  "type": "Http"
},

"uri"部分是我正在努力解决的问题。在整个过程中,我以不同的模式散布了各种转义字符(\@)。

我要么无法使部署成功,但出现以下部署错误:

无法解析模板语言表达式 'concat(variables('apiSettings').Uri, '//@{triggerBody()[/'Id/']}//ScanningInProgress')':预期的令牌 'RightParenthesis' 和实际的 'Identifier '。有关使用详情,请参阅 http://aka.ms/arm-template-expressions ..'。

或者,如果我让部署工作,然后在部署后查看门户中的代码,则字符串连接似乎无法正常工作。该变量不会转换为其值。

我已经验证,如果我直接(通过门户 HTML 编辑器)使用此编辑 Uri:"uri" : "https://edited.azurewebsites.net/api/Packages/@{triggerBody()['Id']}/ScanningInProgress"逻辑应用程序将为来自 HTTP 触发器的每个项目进行补丁调用。

我究竟做错了什么?

4

1 回答 1

14

您需要转义内部单引号,即尝试

"uri": "[concat(variables('apiSettings').Uri, '/@{triggerBody()[''Id'']}/ScanningInProgress')]"

或者,您可以使用点符号来引用属性,即

"uri": "[concat(variables('apiSettings').Uri, '/@{triggerBody().Id}/ScanningInProgress')]"
于 2016-04-20T20:23:13.520 回答