DataFactory调用Business Central REST API参数空格转义致请求失败
问题描述
在Azure Data Factory中发起REST API GET请求筛选postingDate字段获取近期数据时,DataFactory会自动将参数中的空格替换为%20,导致请求无法正常工作。
预期的有效API URL格式:
https://api.businesscentral.dynamics.com/v2.0/abc/abc/api/abc/extendedPowerBI/v2.0/companies(abc)/valueEntries?$select=entryNo,externalDocumentNo,varianceType,dimensionSetID,documentNo,orderLineNo,documentLineNo,no,postingDate,costPerUnit,type,invoicedQuantity,documentDate,locationCode,genProdPostingGroup,inventoryPostingGroup,salespersPurchCode,itemLedgerEntryType,itemLedgerEntryQuantity,itemLedgerEntryNo,itemNo,sourceNo,sourceCode,costAmountExpected,costAmountActual,salesAmountActual,documentType,itemChargeNo,costAmountNonInvtbl,entryType,discountAmount&$filter=postingDate gt 2024-11-10
解决方案
方法1:关闭URL编码选项
在DataFactory的REST链接服务配置中,找到Encode URL选项,将其设置为False。这样DataFactory就不会自动对参数中的空格进行URL编码,保留原始空格格式。
方法2:直接拼接完整URL到基础路径
不将$filter作为单独参数添加,而是将包含$select和$filter的完整查询字符串直接拼在API的基础URL后面,作为活动的请求URL。这种方式可以绕过DataFactory的参数自动编码逻辑。
方法3:使用动态内容构造筛选条件
如果需要动态生成日期(比如获取最近N天的数据),可以用DataFactory表达式构造$filter参数:
- 在REST活动的查询参数中,添加键为
$filter的参数 - 值填写动态表达式,例如:
@concat('postingDate gt ', formatDateTime(addDays(utcnow(), -3), 'yyyy-MM-dd')) - 确保链接服务的
Encode URL已关闭,避免空格被编码。
补充说明
OData规范中,$filter里的运算符(如gt)前后的空格是可选的,也可以直接写为无空格形式:postingDategt2024-11-10,部分API也能识别这种格式,可尝试该写法避免空格编码问题。
内容的提问来源于stack exchange,提问作者Coderman
相关产品推荐
相关产品推荐

