Ms office Office 365 REST API中日期的Odata$筛选器

Ms office Office 365 REST API中日期的Odata$筛选器,ms-office,odata,exchangewebservices,office365,Ms Office,Odata,Exchangewebservices,Office365,我正在尝试使用REST API从用户的Office 365帐户检索事件,但通过字段“开始”进行过滤。例如,检索日期:2014-08-29T09:13:28'之后发生的所有事件,但我总是检索此错误消息 { "error": { "code": "ErrorInvalidUrlQuery", "message": "The query parameter '$filter' is invalid.", "innererror": { "message": "T

我正在尝试使用REST API从用户的Office 365帐户检索事件,但通过字段“开始”进行过滤。例如,检索日期:2014-08-29T09:13:28'之后发生的所有事件,但我总是检索此错误消息

{
  "error": {
    "code": "ErrorInvalidUrlQuery",
    "message": "The query parameter '$filter' is invalid.",
    "innererror": {
      "message": "The query parameter '$filter' is invalid.",
      "type": "Microsoft.Exchange.Services.OData.InvalidUrlQueryException",
      "stacktrace": " at Microsoft.Exchange.Services.OData.Web.ODataQueryOptions.Populate()
 at Microsoft.Exchange.Services.OData.ODataContext..ctor(HttpContext httpContext, Uri requestUri, ServiceModel serviceModel, ODataPathWrapper odataPath, ODataUriParser odataUriParser)
 at Microsoft.Exchange.Services.OData.Web.RequestBroker.InitializeODataContext()
 at Microsoft.Exchange.Services.OData.Web.RequestBroker.Process()",
      "internalexception": {
        "message": "A binary operator with incompatible types was detected. Found operand types 'Edm.DateTimeOffset' and 'Edm.Int32' for operator kind 'Equal'.",
        "type": "Microsoft.OData.Core.ODataException",
        "stacktrace": " at Microsoft.OData.Core.UriParser.Parsers.BinaryOperatorBinder.PromoteOperandTypes(BinaryOperatorKind binaryOperatorKind, SingleValueNode& left, SingleValueNode& right)
 at Microsoft.OData.Core.UriParser.Parsers.BinaryOperatorBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)
 at Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)
 at Microsoft.OData.Core.UriParser.Parsers.FilterBinder.BindFilter(QueryToken filter)
 at Microsoft.OData.Core.UriParser.ODataUriParser.ParseFilterImplementation(String filter, IEdmType elementType, IEdmNavigationSource navigationSource)
 at Microsoft.OData.Core.UriParser.ODataUriParser.ParseFilter()
 at Microsoft.Exchange.Services.OData.Web.ODataQueryOptions.Populate()"
      }
    }
  }
}
这里是我尝试过的所有东西:

[资源]=

url:[ressource]EWS/OData/Me/Events?$filter=Start%20eq%20DateTime'2012-05-29T09:13:28'

url:[ressource]EWS/OData/Me/Events?$filter=Start%20eq%20DateTime'20141231'

url:[ressource]EWS/OData/Me/Events?$filter=month(开始)%20eq%2012

我在字符串字段上尝试了$filter,在字段开头尝试了$select,效果非常好,所以我认为我的错误是由日期格式引起的,但我不知道如何解决它,所以如果有人能在这方面帮助我,那就太好了


谢谢大家!

日期过滤确实有效,但在OData v4规范中,您不能做所有事情。例如,这些都适用于我:

/Me/Events?$filter=Start eq 2014-08-28T21:00:00Z
/Me/Events?$filter=Start ge 2014-08-28T21:00:00Z

在它前面加上“DateTime”会使它失败。月函数也是如此。如果你坚持上面的格式,它应该适合你。

嗨,只要增加top=100或更多你想从收件箱中提取的内容即可

https://outlook.office365.com/api/v2.0/me/MailFolders/Inbox/messages/?%24select=CreatedDateTime%2cLastModifiedDateTime%2cChangeKey%2cCategories%2cReceivedDateTime%2cSentDateTime%2cHasAttachments%2cSubject%2cBody%2cImportance%2cParentFolderId%2cSender%2cFrom%2cToRecipients%2cCcRecipients%2cBccRecipients%2cReplyTo%2cConversationId%2cIsDeliveryReceiptRequested%2cIsReadReceiptRequested%2cIsRead%2cIsDraft%2cWebLink&%24top=100&%24skip=0"

在O365 REST API的V2中,您应该使用:

URL encoded:     $filter=Start/DateTime%20ge%20%272017-03-15T00:00:00Z%27
Not URL encoded: $filter=Start/DateTime ge '2017-03-15T00:00:00Z'

更多信息

根据API文档,似乎不支持
$filter
@wdosanjos感谢您的回答,但在其文档中,Microsoft似乎表示支持:quote:“或使用$filter OData查询参数筛选列表”,您是对的。我确实试过了,虽然url语法是正确的,但我得到了完全相同的错误。我还尝试了其他(非日期)属性,结果也一样。我在这个博客()上看到评论说$filter还没有实现。例如,这一个对我有效:[ressource]/EWS/OData/me/Events?$filter=Subject%20eq%20'Meeting',所以我担心日期格式不受支持yetSamir,你能扩展对我答案的编辑吗?事件实体上没有名为“DateTimeStart”的属性。啊,我错了,我误读了你的答案-其他实体上的一些属性是name
DateTimeX
,我以为你引用了它们。我将恢复编辑