You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bicep+OpenAPI创建API并配置操作级XML策略遇BCP170错误求助

问题解决与需求实现方案

错误原因解析

你遇到的BCP170错误,是因为在使用parent属性关联父资源(这里是apiService)时,子资源的name字段不能包含全路径(带斜杠的层级结构)。原代码里的name: '${apimName}/api/operations/operationNamefromOpenAPIspec/policy'包含了父资源的完整路径,违反了Bicep的资源命名规则。

修正后的实现方案

完全可以通过Bicep实现导入OpenAPI规范创建API,并为不同操作绑定差异化XML策略的需求。以下是修正后的代码及说明:

修正后的Bicep代码

param apiName string = 'reallycool-api-dev'
param apimName string = 'apim-coolness-01'

// 引用已存在的APIM服务实例
resource apimServiceResource 'Microsoft.ApiManagement/service@2022-04-01-preview' existing = {
  name: apimName
}

// 从OpenAPI规范创建API
resource apiService 'Microsoft.ApiManagement/service/apis@2023-05-01-preview' = {
  name: apiName
  parent: apimServiceResource
  properties: {
    displayName: 'ReallyCool-API-dev'
    isCurrent: true
    description: 'ReallyCool API-dev'
    protocols: ['https']
    subscriptionRequired: true
    format: 'openapi+json'
    value: loadTextContent('OpenAPI ReallyCoolAPI.json')
    path: 'reallycool/dev'
    subscriptionKeyParameterNames: {
      header: 'Ocp-Apim-Subscription-Key'
      query: 'subscription-key'
    }
  }
}

// 为第一个操作绑定XML策略(替换为你OpenAPI中实际的operationId)
resource firstOperationPolicy 'Microsoft.ApiManagement/service/apis/operations/policies@2022-09-01-preview' = {
  name: 'operationNamefromOpenAPIspec/policy' // 仅需指定操作ID + policy,无需全路径
  parent: apiService
  properties: {
    format: 'rawxml'
    value: loadTextContent('TestPolicy.xml')
  }
}

// 示例:为第二个操作绑定不同的XML策略
resource secondOperationPolicy 'Microsoft.ApiManagement/service/apis/operations/policies@2022-09-01-preview' = {
  name: 'anotherOperationIdFromOpenAPI/policy'
  parent: apiService
  properties: {
    format: 'rawxml'
    value: loadTextContent('AnotherTestPolicy.xml')
  }
}

关键说明

  • 资源命名规则:当通过parent属性关联父资源时,子资源的name只需提供当前层级的名称组合。对于操作策略资源,格式为{operationId}/policy,其中operationId是你OpenAPI规范中定义的操作ID。
  • 多操作策略配置:如果需要为多个操作设置不同策略,只需重复定义策略资源块,替换对应的operationId和XML策略文件路径即可。
  • 操作ID匹配:确保使用的operationId与OpenAPI规范中定义的完全一致,APIM在导入OpenAPI时会直接沿用这些ID作为操作的唯一标识。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:06:07