问题标签 [odata-v4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5054 浏览

c# - PageSize 和 MaxTop 的区别

[EnableQuery(PageSize=20)]和有什么区别[EnableQuery(MaxTop=20)]

据我所知,他们都对结果设置了最大限制。

调用GET odata/Products?$top=100他们中的任何一个都只会给我 20 个结果。

0 投票
1 回答
13171 浏览

c# - OData v4 路由前缀?

我有一个并排的 Web API 2.2 APIController 和 OData v4 ODataController。我的 APIController 在内部使用这样的路由属性(没有预定义的路由默认值):

因此通过 ./api/My 和 ./api/My/?mykey=value 路由到

我已经尝试设置我的 ODataController 以遵循类似的诉讼:

像这样提前定义odata路由:

但尝试访问 ./odata/My 和 ./odata/My(value) 最终会进入我的 APIController 而不是 ODataController。

我如何使用不同的前缀但名称相同来路由这些,并将它们转到适当的控制器。如果我可以阻止它,我不想为每条路线使用不同的名称,前缀应该处理所有事情,但由于某种原因它们不是。

0 投票
2 回答
1715 浏览

c# - 查询具有可为空 datetimetimeoffset 属性的链接实体时出现问题

我正在使用 simple.odata.client v4 来访问我的 odata rest api。数据模型相当复杂。我遇到的问题是,我只想获取相关实体满足条件的实体,该条件涉及可为空的 datetimeoffset (OnHandLastUpdated) 的属性。实际上在 api 方面它是一个可以为空的日期时间,但我认为 odata v4 会自动转换它。我尝试运行的代码是:

我得到的错误如下:

我在某处读到,odata v4 尚不完全支持可为空的 datetime 和 datetimeoffset,这可能会导致此问题。是否有解决方法来实现上述查询?

0 投票
2 回答
20526 浏览

c# - 将 Distinct 应用于 OData 查询

我想从我的 OData 端点获取不同值的列表。但尚不支持 distinct 或 group by。

我的 URI 查询看起来像这样

我的控制器

没有工作:(

0 投票
1 回答
2385 浏览

asp.net-web-api - odata 服务的 url 后缀“.svc”

这可能是一个愚蠢的问题,我对 ODATA 服务的后缀有点困惑.svc,因为我看到的大多数示例总是.svc在根 URL 处有后缀,例如:

http://services.odata.org/V4/Northwind/Northwind.svc/

甚至在ODATA 文档示例中:

在此处输入图像描述

在 ASP.NET Web Api 上构建 ODATA 时,我看到后缀.svc实际上并不是强制性的,如果我们需要在路由配置中添加它,我们可以添加它。

那么.svc为构建 ODATA 服务而在根 URL 中添加后缀的目的是什么,或者只是约定这是 ODATA服务

0 投票
1 回答
946 浏览

odata - OData 还在自引用实体的子项中应用 $expand

我有一个自引用实体,我需要在每个级别上 $expand=Other。

预期结果:

但我不知道如何编写查询。

/odata/Entities/$expand=Children($levels=max),Other产量

孩子 (Id: 2) 缺少其他。

0 投票
2 回答
454 浏览

silverlight - 如何为 Silverlight 5 生成 OData v4 客户端?

我们正在尝试为 ASP.NET + Silverlight 5 设置 Web API 2.2 和 OData v4。

Initiall POC 有一个使用 Simple.OData 连接的单元测试项目。这很好用。但我们无法在 Silverlight 5 上设置 OData 客户端。

使用客户端代码生成器 v4 并不断出错

命名空间“Microsoft.OData”中不存在类型或命名空间名称“Client”(您是否缺少程序集引用?) C:\Workspaces\GKS\Main\Source\Simutek.Gks\Source\Simutek.Gks.UI .SL.Common\GksODataClient.cs Simutek.Gks.UI.SL.Common

套餐:

引用看起来不错,我们还在 app.config 中尝试了 AssemblyBinding:

更新:确实,虽然Microsoft.OData.Client NuGet 包安装在 Silverlight 上,但实际上并未在其目标中指定 SL5。我现在看到这个包只针对

便携-net45+wp8+win8+wpa

因此,虽然我可以在 PCL 项目中进行,但我不能在针对 Silverlight 5 的项目中这样做。

有解决办法吗,有谁做到了?

0 投票
2 回答
1030 浏览

asp.net-web-api - WebApi 2 and OData controller - cast exception during route configuration, GetEdmModel not understood

I have a controller that I've built (extending from System.Web.Http.Odata.ODataController) and I think it's going to work fine - it's mostly based on pure scaffolding provided by my Visual Studio IDE.

The application will build, but, errors out during application start-up. When it goes to perform the initial route configuration, it fails on the last line of this WebApiConfig class in my App_Start folder - the call to config.MapODataServiceRoute throws an InvalidCastException because the value of builder.GetEdmModel() isn't understood:

Here's the specific language of the InvalidCastException:

Hmmm.. the docs for ODataConventionModelBuilder and MapODataServiceRoute seem to indicate I'm dealing with compatible types. If I read the error right, I'm getting back an instance of Microsoft.Data.Edm.Library.EdmModel from the call to GetEdmModel, which I would think ought to be conformant to the IEdmModel interface, per the docs.

Here's my web application's NuGet packages.config - hopefully this helps you understand the libraries being referenced by my web app:

0 投票
1 回答
191 浏览

date - 如何仅使用查询参数检查日期是否等于 datetime 属性的日期

DateTime有财产。

我想检查日期是否等于我的属性中的日期,并且必须完全在 OData v4 中可用的 url 查询参数中完成。

这不起作用:(

是的,我可以使用greater then or equal,但这已经按预期工作了。这就是equal问题not equal所在。

0 投票
1 回答
2013 浏览

asp.net-web-api - 用于删除 m:m 个实体之间关系的 OData 属性路由

该场景是一个使用 OData v4 的应用程序,服务器端 API 基于使用 ODataLib 的实体框架模型,客户端使用 Visual Studio 的 OData 客户端代码生成器扩展

我无法让 OData 属性路由用于删除 m:m 关系中实体的关系,客户端为此生成 DELETE 请求,格式如下:

用于创建链接的 POST 属性路由工作得很好 - 相关实体标识符在正文中编码,并且以下控制器操作方法声明有效(控制器本身具有[ODataRoutePrefix("tblTestRestaurant")]):

但是我无法为 DELETE 获得类似的工作,其中相关实体的 ID 是使用$ref?id=...URL 中的语法指定的。

我使用 ODataRoute 属性尝试了以下操作:

但是上述控制器操作都没有响应对http://developer4:8080/odata/tblTestRestaurant(241)/tblTestDishes/$ref?$id=http://developer4:8080/odata/tblTestDish(1).

我可以让它工作的唯一方法是不使用属性路由,而是依赖 OData 路由约定,即

此方法依赖于测试字符串 navigationProperty 来确定要修改实体上的哪个集合导航属性 - 相反,我更喜欢使用属性路由并在我的控制器中为每个集合导航属性设置一个单独的操作方法。

我使用了许多教程和文档,特别是 https://damienbod.wordpress.com/2014/06/10/getting-started-with-web-api-and-odata-v4/

我也经历了一些 OData WebApi 测试用例,特别是这个混合使用属性路由和 OData 路由约定的测试用例 - 但不包含删除链接的属性路由示例。

所以我的问题是 - 我应该使用什么 ODataRoute 属性语法和方法参数,假设 ODataRoute 属性确实支持删除 URL 中的这种 ...$ref?id=... 语法;如果没有,那么还有什么选择?