【发布时间】:2020-08-02 12:44:05
【问题描述】:
我正在尝试在我的 OData 服务中查询日期时间大于或等于给定值的数据。它没有按预期工作
我已阅读文档:
https://docs.microsoft.com/en-us/odata/webapi/datetime-support#filter-datetime
程序集:
- Microsoft.AspNetCore.OData 7.4.0
- NET Core 3
- EF 核心
重现步骤
我尝试了以下查询格式:
-
https://myurl/api/resource?$filter=city eq 'Kigali' and purchaseDateTime gt 2020-01-01T23:59:59.99Z &$orderby=purchaseDateTime descHTTP 500 - 转换失败 从字符串转换日期和/或时间时。 -
https://myurl/api/resource?$filter=city eq 'Kigali' and purchaseDateTime gt cast(2020-01-01T23:59:59.99Z,Edm.DateTimeOffset) &$orderby=purchaseDateTime desc返回 HTTP 500 - 内部 服务器错误 -
https://myurl/api/resource?$filter=city eq 'Kigali' and purchaseDateTime gt datetime'2020-01-01T23:59:59.99Z' &$orderby=purchaseDateTime desc
在 OData 网站上,这可行
预期结果
按照http://services.odata.org响应的方式根据查询返回数据
实际结果
HTTP 错误请求或 HTTP 500
Microsoft says 这应该可以工作:
GET ~/Customers?$filter=Birthday lt cast(2015-04-01T04:11:31%2B08:00,Edm.DateTimeOffset)
GET ~/Customers?$filter=year(Birthday) eq 2010
我尝试过的其他信息来源:
【问题讨论】:
-
不要使用演员表。现在使用字符串 = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ssZ");
-
这不是 .NET,这是一个 OData 查询@jdwengspan>
-
你能提供你的模型吗?
-
访问
https://myurl/api/resource时可以获取数据吗?我测试了你的查询,它对我有用。 -
您应该发布定义您正在查询的资源的 $metadata 部分,以及 `?$filter=city eq 'Kigali'&$top=2' 的结果,这应该提供
标签: c# datetime odata asp.net-core-webapi