问题标签 [microsoft-odata]

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 投票
2 回答
507 浏览

c# - 当版本 7 中缺少 ODataComplexValue 时,如何在 Microsoft.OData.Core 中创建复杂值?

我正在使用 Microsoft.OData (ODataLib) 版本 7 从 OData 服务解析元数据。

解析 ODataModel 后,我想创建一个示例消息,其中包含所有声明属性的示例值。

到目前为止,一切都很好。适用于属性中的原始值,或枚举甚至集合值。

原始值的示例:

我想创建一个像这样的复杂值:

但是,版本 7 (最新的 NuGet 版本)中不存在 ODataComplexValue 。

我查看了 github:该类在 master 分支中,但不在 ODatav4-7.x 分支中。

https://github.com/OData/odata.net/tree/master/src/Microsoft.OData.Core

如何创建复杂的值?

0 投票
0 回答
808 浏览

c# - 使用 ODataLib v7 时的 UnexpectedXmlAttribute

我正在尝试将示例 v4 OData 服务http://services.odata.org/V4/OData/OData.svc/与新的 OData v7 一起使用。当我打电话ODataMessageReader.ReadMetadataDocument时,我遇到了一个UnexpectedXmlAttribute例外。是否可以忽略不支持的属性和元素?

我得到的例外是:

Microsoft.OData.ODataException 未处理 HResult=-2146233079
Message=无法从消息内容中读取元数据文档。UnexpectedXmlAttribute :在给定的上下文中不需要属性“ConcurrencyMode”。: (1, 2043)

0 投票
1 回答
45 浏览

c# - Microsoft OData 控制器 - 在选择时调用操作

是否可以在另外查询 OData 资源的同时调用操作?

我想使用一个 OData POST 查询将资源列表分配给一个人(在查询字符串中选择)。

IE。是否可以执行这样的事情(在伪查询中):

[发布] http://hostname.com/Resource/Assign ?$filter=name eq '资源名称'

0 投票
1 回答
181 浏览

c# - 如何使用 MSFakes 模拟 ODataClient 的 Expand 方法?

我从 Dynamics 365 元数据生成了一个 OData 客户端。我正在为业务逻辑编写单元测试,我想用自定义数据模拟 REST API。

之前我问过如何为 ODataClient 设置假返回数据,我找到了答案:如何设置 MS Fakes 对象的返回值?

一切正常,直到我不得不使用 Expand 关键字查询嵌套数据(使用OData Library 中的 Expand lambda)。

例如,当与 Faked ODataClient 程序集一起使用时,此查询失败并出现 NullReferenceException:

如果没有 Expand lambda,一切都会按预期进行。

如果我这样做:

然后我得到NullReferenceException一个堆栈跟踪:

我知道问题是我没有在某处设置垫片或存根,但我找不到正确的替换方法。我试图阅读 OData 源代码,但还没有发现任何有用的东西。

我尝试设置 Accounts ( ShimSystem.AccountsGet) 的 Getter 方法,但它什么也没做。

任何想法如何进一步解决这个问题?

0 投票
1 回答
817 浏览

group-by - Odata V4 group by with Top and skip 不工作

我无法让 groupby 与 top 和 skip 一起工作,这应该是最简单的事情。我正在使用 OData 获取数据并能够使用下面的查询获取输出

https://localhost:6523/api/OData/AssetUsage/ ?$apply=groupby((assetId,BIAsset/name),aggregate(interactions with sum as totalInteractions, uniqueInteractions with sum as totalUniqueInteractions))&$orderBy=totalInteractions asc

上述查询的输出

但是,当我尝试在上面生成的输出上应用 skip 或 top 时,我收到下面提到的错误

https://localhost:6523/api/OData/AssetUsage/ ?$apply=groupby((assetId,BIAsset/name),aggregate(interactions with sum as totalInteractions, uniqueInteractions with sum as totalUniqueInteractions))&$orderBy=totalInteractions asc&$顶部=1

错误-

  • message": "URI 中指定的查询无效。在“Portal.Models.Entities.AssetUsage”类型上找不到名为“BIAsset”的属性。",

  • “内在错误”:

    -"message": "在类型 'Portal.Models.Entities.AssetUsage' 上找不到名为 'Asset' 的属性。",

    -“类型”:“Microsoft.OData.ODataException”,

实体类结构

0 投票
2 回答
762 浏览

c# - AspnetCore Odata 如何创建调用可等待查询的异步操作

这是我的带有 ODATA 操作的 ODATA 控制器。

这是我的存储库方法。

现在我明白了将 repo 中的 GetData 方法设置为异步是没有意义的,因为这只是返回一个可查询的,直到您将其称为枚举器时才会执行。

所以做异步的部分是动作方法。我如何使它成为异步等待调用?据我所知,Odata EnableQuery 方法需要一个 IQueryable 。

0 投票
2 回答
373 浏览

c# - 为什么添加 Microsoft.AspNetCore.OData.Versioning 后我的 HTTP Post 不再传递正文内容

我正在研究通过 Microsoft.AspNetCore.Odata v7.1.0 NuGet 实现 OData 的 ASP.NET Core 2.2 API。我一切正常,所以我决定通过 Microsoft.AspNetCore.OData.Versioning v3.1.0 添加 API 版本控制。

现在,我的控制器中的 GET 和 GET{id} 方法可以与版本控制一起正常工作。例如,我可以使用 URL 访问 GET 列表端点方法

或者

但是,当我尝试创建新记录时,请求会路由到控制器中的正确方法,但现在请求正文内容未传递给 POST 控制器方法

我一直在关注 Microsoft.ApsNetCore.OData.Versioning GitHub中的示例

我的控制器中有 HttpPost 方法;

当我调试时,请求正确地路由到控制器方法,但“记录”变量现在为空,而在添加 API 版本控制的代码更改之前,它已正确填充。

我怀疑这是我使用模型构建器的方式,因为该代码已更改为支持 API 版本控制。

在尝试实现 API 版本控制之前,我使用了一个模型构建器类,如下所示;

还有一个 Startup.cs --> Configure 方法,如下面的代码片段所示;

它在控制器的 HttpPost 方法中与 [FromBody] 一起使用。

但是,在遵循 API Versioning OData GitHub 中的示例时,我现在使用如下所示的配置类,而不是之前的模型构建器;

而我的 Startup.cs --> Configure 方法改变如下图;

如果相关,我的 Startup.cs -> ConfigureServices 中有以下代码;

我觉得问题在于模型在某种程度上没有正确匹配,但我看不出它为什么不正确

更新 3/18/19 - 附加信息

这是我的实体类;

和 EntityBase 类;

这是 Postman 的请求正文;

有任何想法吗?

0 投票
1 回答
990 浏览

c# - OData 无法识别我的集合属性

当我在ShakeoutDocument没有填充集合的情况下发布 a 时,可以正确OData Serializer理解JSON& 填充ODataActionParameters

但是,当我将子记录添加到任一ShakeoutDocument's集合属性中时...Odata Controller's ODataActionParameters参数为空。我已将其缩小到OData EDM Model Configuration.

  • 如何正确地将集合属性(如下)“表征”到 EDM 模型配置

班级看起来像:
这些系列是详细信息和印章(下)

我当前的 EDM 配置看起来像:
我尝试了此处定义的各种方法。奇怪的是......IObjectState注册就好了。

发送此JSON 作品:
如果我没有填充 Details & Seals 集合..它会正确序列化。 SENDJSON

如果我填充 Details & Seals 集合...参数为 NULL。

接收失败:
这显示了从服务发送回客户端的对象和客户端接收到的 JSON。

在此处输入图像描述

未绑定函数看起来像:
为了完整起见,我将这个包括在内......

更新 1:
$MetaData 似乎理解集合类型......

更新 2:
我刚刚注意到...ShakeoutDetails 和 ShakeoutDetail 的 NavigationPropertyBinding 为“Meter”...在 ShakeoutDocument 中不存在(并且永远不会包含在内,因为这是模型而不是实体)。

0 投票
1 回答
83 浏览

dynamics-crm - Microsoft.OData.Client $expand 不填充模型

我正在使用基于microsoft 示例应用程序的 Microsoft.OData.Client 。
这是我的简单 WebAPI 控制器:

客户端生成正确的 URL。 https://example.com/data/SalesOrderHeadersV2?$top=1&$expand=SalesOrderLines 我可以在提琴手中看到 JSON 中返回的 SalesOrderLines 属性。

但是,当我检查结果变量(或查看输出)时,没有 SalesOrderLines 属性。因此,订单行尚未从从 oData 源下载的数据映射到我的结果对象中。

重要提示:我正在使用EDMXTrimmer来减少客户端中的实体数量,如果我缺少加入实体,这会是一个问题吗?(在这种情况下似乎不太可能有加入实体)

线索?
当我尝试更改此行时:

它不会编译,因为'SalesOrderHeaderV2' does not contain a definition for 'SalesOrderLines' ...
Note:context.SalesOrderLines确实存在。

0 投票
1 回答
537 浏览

odata - odata datetimeoffset 过滤器失败,时区为正

我遇到了 odata 过滤问题。我已将我的场景简化为以下内容:我的模型是这样构建的:

控制器和 GET 实现如下:

在 DATE 列上执行以下过滤器会给我 OK 的结果。请注意,时区为负数

在 DATE 列上执行以下过滤器会引发异常。请注意,在这种情况下时区是正数

我错过了什么吗?

}