我正在尝试基于已具有其值的二进制扩展属性从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的过滤器表达式与单个扩展属性和值限制不匹配。
我对字符串类型的扩展属性使用了相同的过滤器语法,并且效果很好,所以我认为这是一个二进制属性这一事实与问题有关。
答案 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==')
“六个比较运算符可用于除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==')