问题标签 [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.
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
如何创建复杂的值?
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)
c# - Microsoft OData 控制器 - 在选择时调用操作
是否可以在另外查询 OData 资源的同时调用操作?
我想使用一个 OData POST 查询将资源列表分配给一个人(在查询字符串中选择)。
IE。是否可以执行这样的事情(在伪查询中):
[发布] http://hostname.com/Resource/Assign ?$filter=name eq '资源名称'
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 方法,但它什么也没做。
任何想法如何进一步解决这个问题?
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”,
实体类结构
c# - AspnetCore Odata 如何创建调用可等待查询的异步操作
这是我的带有 ODATA 操作的 ODATA 控制器。
这是我的存储库方法。
现在我明白了将 repo 中的 GetData 方法设置为异步是没有意义的,因为这只是返回一个可查询的,直到您将其称为枚举器时才会执行。
所以做异步的部分是动作方法。我如何使它成为异步等待调用?据我所知,Odata EnableQuery 方法需要一个 IQueryable 。
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 的请求正文;
有任何想法吗?
c# - OData 无法识别我的集合属性
当我在ShakeoutDocument
没有填充集合的情况下发布 a 时,可以正确OData Serializer
理解JSON
& 填充ODataActionParameters
。
但是,当我将子记录添加到任一ShakeoutDocument's
集合属性中时...Odata Controller's
ODataActionParameters
参数为空。我已将其缩小到OData EDM Model Configuration
.
- 如何正确地将集合属性(如下)“表征”到 EDM 模型配置
班级看起来像:
这些系列是详细信息和印章(下)
我当前的 EDM 配置看起来像:
我尝试了此处定义的各种方法。奇怪的是......IObjectState
注册就好了。
发送此JSON 作品:
如果我没有填充 Details & Seals 集合..它会正确序列化。 SEND
JSON
如果我填充 Details & Seals 集合...参数为 NULL。
接收失败:
这显示了从服务发送回客户端的对象和客户端接收到的 JSON。
未绑定函数看起来像:
为了完整起见,我将这个包括在内......
更新 1:
$MetaData 似乎理解集合类型......
更新 2:
我刚刚注意到...ShakeoutDetails 和 ShakeoutDetail 的 NavigationPropertyBinding 为“Meter”...在 ShakeoutDocument 中不存在(并且永远不会包含在内,因为这是模型而不是实体)。
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
确实存在。
odata - odata datetimeoffset 过滤器失败,时区为正
我遇到了 odata 过滤问题。我已将我的场景简化为以下内容:我的模型是这样构建的:
控制器和 GET 实现如下:
在 DATE 列上执行以下过滤器会给我 OK 的结果。请注意,时区为负数:
在 DATE 列上执行以下过滤器会引发异常。请注意,在这种情况下时区是正数。
我错过了什么吗?
}