ODATA:URL中的特殊字符

时间:2019-01-02 16:30:25

标签: odata

我在创建ODATA URL时遇到问题。

对于以下URL,

https://xxxxxxx.xxx.xxxxxxxx.com/sap/c4c/odata/v1/c4codataapi/CorporateAccountHasContactPersonCollection?$ filter =帐户ID等于'1000024'

结果:

- <m:properties>
    <d:ObjectID>00163E10AD0B1ED686EF458B4E8C51D5</d:ObjectID> 
    <d:ParentObjectID>00163E10AD201EE5A4F0B592DE751AE8</d:ParentObjectID
    <d:AccountID>1000024</d:AccountID> 
    <d:ContactID>1002636</d:ContactID>
    <d:FunctionCode>Z021</d:FunctionCode> 
    <d:Mobile>+33 123456789</d:Mobile> 
    <d:Phone>+33 987654321</d:Phone> 
  </m:properties>

与我将过滤器更改为FunctionCode时的结果相同 https://xxxxxxx.xxx.xxxxxxxx.com/sap/c4c/odata/v1/c4codataapi/CorporateAccountHasContactPersonCollection?$ filter = FunctionCode eq'Z021'

但是当我使用过滤器Phone

进行搜索时

https://xxxxxxx.xxx.xxxxxxxx.com/sap/c4c/odata/v1/c4codataapi/CorporateAccountHasContactPersonCollection?$ filter =电话号码'+33 123456789'

URL根本不起作用。是因为电话号码中包含特殊字符“ +”

我尝试使用$ filter = endswith(Phone,'123456789'),它工作正常。但这不是我正在寻找的解决方案。

有人可以建议另一种方式吗?

谢谢 问候 普拉特

1 个答案:

答案 0 :(得分:1)

原因是这些特殊字符在URL中使用时具有不同的含义。 JavaScript“ encodeUri”或“ encodeUriComponent”无法解决此问题。

以下是在OData查询中使用时需要替换的特殊字符的列表: https://msdn.microsoft.com/en-us/library/aa226544(SQL.80).aspx

特殊字符+表示一个空格(并且URL中不能使用空格),因此您需要用其十六进制值(在这种情况下为%2B)替换该字符。

您的校正后的过滤器应为$filter=Phone eq '%2B33 123456789'

找到好文章here