Microsoft Graph:无法按二进制singleValueExtendedProperty进行筛选

时间:2019-04-26 08:36:41

标签: microsoft-graph microsoft-graph-sdks

我正在尝试基于已具有其值的二进制扩展属性从grapi api检索事件。我已经从相同的api检索了此值,所以我知道存在具有该值的事件。我也知道属性ID是正确的,因为我将它与.Expand()一起使用来获取值。

var value = "BAAAAIIA4AB0xbcQGoLgCAAAAAAwMvfBFvzUAQAAAAAAAAAAEAAAAEZ53uCfQ51AhtRf+FNQjOk=";
var cleanGlobalObjectIdPropertyId = "Binary {6ed8da90-450b-101b-98da-00aa003f1305} Id 0x23";

var events = await client.Users["myuser@example.com"].Events.Request()
    .Filter($"singleValueExtendedProperties/Any(ep: ep/id eq '{cleanGlobalObjectIdPropertyId}' and ep/value eq '{value}')")
    .GetAsync();

这是我得到的错误:

  

Microsoft.Graph.ServiceException:代码:ErrorInvalidUrlQueryFilter

     

消息:$ filter的过滤器表达式与单个扩展属性和值限制不匹配。

我对字符串类型的扩展属性使用了相同的过滤器语法,并且效果很好,所以我认为这是一个二进制属性这一事实与问题有关。

1 个答案:

答案 0 :(得分:0)

我也面临这个问题。但是我尝试针对mapi属性SearchKey搜索/ messages。 我当时想使用类似的东西:

https://graph.microsoft.com/v1.0/me/messages?$filter=singleValueExtendedProperties%2FAny(ep%3A%20ep%2Fid%20eq%20'Binary%200x300B'%20and%20ep%2Fvalue%20eq%20'yxum+DwfxUy13C4qs5R6ig==')

根据https://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752358

“六个比较运算符可用于除Edm.Binary,Edm.Stream和Edm.Geo类型以外的所有基本值。”

所以我认为应该以某种方式从base64强制转换或解码二进制文件,否则根本不可能。

更新: 所以我终于弄清楚了。 假设我的singleValueExtendedProperty的值为:

{
    "id": "Binary 0x300b",
    "value": "yxum+DwfxUy13C4qs5R6ig=="
}

我想按此属性的值查找消息。这里的问题是如果存在,应该对“ +”进行编码。还应将值强制转换为Edm.Binary。正确的查询如下所示:

https://graph.microsoft.com/v1.0/me/messages?$filter=singleValueExtendedProperties%2FAny(ep%3A%20ep%2Fid%20eq%20'Binary%200x300B'%20and%20cast(%20ep%2Fvalue,Edm.Binary)%20eq%20binary'yxum%2BDwfxUy13C4qs5R6ig==')