【问题标题】:OData of Outlook Event List cannot order by "Id"Outlook 事件列表的 OData 无法按“Id”排序
【发布时间】:2019-02-22 16:08:24
【问题描述】:

我试图从 Microsoft Graph 中获取this documentation 之后的事件列表。

我想按lastModifiedDateTimeid 的顺序获取列表。

这是示例查询:

var getResource = string.Format("/me/calendar/events/?$filter=lastModifiedDateTime ge {0}&$orderBy=lastModifiedDateTime, id", XmlConvert.ToString(updatedMin, XmlDateTimeSerializationMode.Utc));

但是,当我执行它时,它会导致错误:

{
  "error": {
    "code": "ErrorInvalidProperty",
    "message": "The property 'Id' does not support filtering.",
    "innerError": {
      "request-id": "bb56a0d0-46f3-4b7c-80bd-043a0b3fd8b5",
      "date": "2018-09-17T15:23:40"
    }
  }
}

其实我并没有在$filter中设置Id,而是设置为$orderby

当我尝试从$orderby 中排除Id 时,它起作用了。这是工作查询:

var getResource = string.Format("/me/calendar/events/?$filter=lastModifiedDateTime ge {0}&$orderBy=lastModifiedDateTime", XmlConvert.ToString(updatedMin, XmlDateTimeSerializationMode.Utc));

还有人知道如何根据Id 对列表进行排序吗?

【问题讨论】:

    标签: c# microsoft-graph-api outlook-restapi


    【解决方案1】:

    您不能通过id 订购,这样做也没有任何意义。 id 是几个属性(主题、路径等)的散列组合。因此,它们的值既不是可排序的,也不是人类可读的。

    例如,这是一个实际的id 值:

    AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OABGAAAAAAAiQ8W967B7TKBjgx9rVEURBwAiIsqMbYjsT5e-T7KzowPTAAAAAAENAAAiIsqMbYjsT5e-T7KzowPTAACNM9xPAAA=
    

    另外,我强烈建议使用Microsoft Graph .NET Client 而不是自己滚动。它将有助于减少学习曲线并为您提供更具可读性的代码:

    await graphClient.Me
       .Calendar
       .Events
       .Request()
       .Filter("lastModifiedDateTime ge {dateTime}")
       .OrderBy("lastModifiedDateTime") 
       .GetAsync();
    

    【讨论】:

    • 由于某些原因,我必须保持事件的顺序。因此,通过 id 排序将解决它。但是,由于错误的错误通知,我认为按 id 排序存在错误。如果不是bug。那么至少,他们应该修复错误通知。
    • id 排序会与您想要的相反,它会导致几乎随机的顺序。此外,如果编辑了这些事件中的任何一个(即使是对主题的微小更改),顺序也会更改。此外,/events 端点仅返回单个事件和事件主控。如果有重复事件,则仅返回系列中的第一个事件。要获取完整的日历,您需要使用 /calendarView
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多