问题标签 [asp.net-web-api-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 投票
3 回答
1801 浏览

asp.net-web-api-odata - 对 $select 查询选项的 Web API OData 无类型支持

我正在使用 ASP.NET Web API 2 OData 中的新无类型支持。我有兴趣为$select查询选项提供支持。如何省略 $select 查询选项未选择的 EdmEntityObject 中的结构属性?

以下是使用无类型模型的非常简单示例的 Web API 配置示例。

以下是来自简单 ODataController 的部分片段

这将输出:

如果用户应用 $select 查询选项,例如/odata/Products?$select=Name。这应该会产生以下输出:

任何帮助将不胜感激

0 投票
3 回答
2349 浏览

c# - ASP.NET Web API OData - 将 DTO 查询转换为实体查询

我们目前正在研究在我们的 Web API 中使用 OData 查询语法。我们不打算实现完整的 OData 实现 - 只是利用查询语法。

将您的应用程序分成几个层通常被认为是良好的应用程序架构。在现代 Web 应用程序中,这些层将包括数据层和 UI/传输层,它们可以在将存储在数据库中的信息发送给客户时以不同方式对其进行建模。

例如:您可能有一个如下所示的数据库(实体框架)模型:

但是您的 Web API 可能会以不同的有线格式向您的客户公开这些数据:

使用 ASP.NET Web API 和(大概??)Microsoft ASP.NET Web API OData 库我们将如何实现我们的客户将针对 DTO 格式编写查询的场景,例如:

...然后我们会将其转换为我们的数据格式。例如:

或其他一些允许我动态查询数据库的格式,例如表达式。例如:

我已经想到了几种手动实现这一点的方法,但我很想知道其他人将如何解决这个问题,因为我觉得到目前为止我的实现非常粗糙,不太可能经得起审查。

Web API OData 库(和相关的 EDM 库)是否有可以为我实现部分或全部这些功能的功能?

0 投票
1 回答
204 浏览

asp.net-web-api - webAPI odata 查询:没有像我希望的那样过滤

我正在尝试这样查询我的 WebAPI:

但是查询没有按预期过滤,它只是返回每个通道实体的所有子 ScheduleMetadata 实体。

我错过了什么?

0 投票
1 回答
328 浏览

c# - 防止 OData $extend 行为返回实体

在我的实体模型中,我有大量实体链接到创建它们的用户。这是一个简单的例子......

我想通过 OData 端点公开 JobNotes,但我现在不想公开用户,因为它包含密码和哈希盐。

如果我只是edmxModelBuilder.EntitySet<EF.User>("Users")从我的 OData 模型中删除该行,那么我将无法获取 JobNote 或与用户关联的任何其他对象。

如果我从我的实体框架模型中删除密码和盐属性,我将无法使用我的模型在应用程序的其他区域验证我的用户。我可能可以解决这个问题,但我认为它是最后的手段,而不是修复。

我正在考虑对 User 属性使用 HasNavigationPropertyLink 方法,但我还不太了解它是如何工作的。

编辑:好的,我已经创建了导航属性链接......

...但它给了我同样的问题。我想那是因为我在构建模型后更新了配置,但我无法重新构建和重新分配它。

0 投票
3 回答
2555 浏览

asp.net - 您如何将乐观并发与 WebAPI OData 控制器一起使用

我有一个 WebAPI OData 控制器,它使用 Delta 对我的实体进行部分更新。

在我的实体框架模型中,我有一个版本字段。这是 SQL Server 数据库中的行版本,映射到实体框架中的字节数组,其并发模式设置为固定(它首先使用数据库)。

我正在使用 fiddler 使用 Version 字段的陈旧值发回部分更新。我从上下文中加载当前记录,然后在顶部修补更改的字段,这会更改版本列中的值而不会引发错误,然后当我在上下文中保存更改时,所有内容都会保存而不会出现错误。显然这是意料之中的,正在保存的实体尚未从上下文中分离出来,所以我如何使用 Delta 实现乐观并发。

我正在使用所有东西的最新版本(或者就在圣诞节前),所以实体框架 6.0.1 和 OData 5.6.0

谢谢

0 投票
1 回答
2806 浏览

asp.net-web-api - 使用 Web Api OData 控制器扩展集合

我正在使用 OData 框架 5.0.0 和 Web API 5.0.0 和 EntityFramework 5.0.0。并且在作为集合的导航属性上展开有问题。我总是得到以下异常:

扩展非集合导航属性就像一个魅力。

这些是我的 EF 课程:

ElementTemplate 的元数据如下所示:

控制器中的相关方法如下所示:

以下查询有效:

/odata/ElementTemplates(guid'...')/Elements

/odata/ElementTemplates?$expand=Base

/odata/ElementTemplates?$expand=DefaultTemplateAttribute

但是当访问一个集合时,我得到了上面提到的错误:

/odata/ElementTemplates?$expand=元素

/odata/ElementTemplates(guid'...')?$expand=Elements

如果我以某种方式更改控制器,它会预加载数据:

然后所有查询都可以工作,但显然会降低性能。

这个问题似乎类似于Expanding collections with EntitySetController in MVC Web Api,但他们指出问题出在 NHibernate 框架中,我显然没有使用它,所以必须有别的东西,知道吗?

通过 WCF DataServices 使用相同的 EF 模型时,我也没有遇到问题。

谢谢!

0 投票
1 回答
413 浏览

asp.net-web-api - JayData 在实体更新期间 WebApi v2 Odata 的行为不正确,补丁端点被调用

在尝试更新实体时,JayData 会在 WepAPI 后端触发 PatchEntity 方法。我发现这是一种无效行为,因为应该调用 UpdateEntity。

添加和删​​除实体功能正常。在后端,我有一个继承自 EntitySetController<> 的控制器

这是在客户端调用的代码:

我在这里错过了什么吗?

0 投票
1 回答
653 浏览

asp.net-web-api - Jaydata 更新不适用于 webapi v2 odata

我已经初始化了一个 jaydata 上下文:

mycontext.prepareRequest 的解决方法是在 github 上发现此问题后完成的

已成功显示已初始化角色和用户的列表。但是我在更新实体时仍然遇到问题:

请求被重定向到下面提供的控制器的 UpdateEntity 方法,但是只设置了实体的 Id 属性。其他属性为 NULL,如果请求被重定向到 PatchEntity 方法(当未应用变通方法破解时),更改的字段也不会传递给增量。在这两种情况下的请求有效负载中(无论是否被破解),只有 Id 被传递给服务器。

控制器:

公共类 BaseODataController : EntitySetController where TEntity : class where TEntityDto : class where TIdentityType : class where TService : ICrudService { // ...

protected override TEntityDto UpdateEntity(TIdentityType key, TEntityDto update) { _service.Update(update); 返回 base.UpdateEntity(key, update); }

// ... }

此外,在调试时,我可以看到实体已跟踪更改:

我唯一不明白的是为什么 ValidationErrors 在 _changedProperties 中:

所以这里的问题是为什么更改没有在请求有效负载中传递给服务器?

提前致谢!

0 投票
1 回答
683 浏览

odata - 在 Web API 中使用无类型实体对象支持时的 OData 空导航属性

我有两种类型 Person 和 Honorific ,它们之间的关系为 0..1 到 Many 。我正在使用 queryOptions.request.SetSelectExpandClass 来支持扩展,并且当有敬语时它可以完美地扩展敬语。

当没有 Honorific 时,我需要 Json 有效负载包含 Honorific=(null)。在那种情况下,我从 TryGetPropertyValue 返回一个空值,但 Json 序列化程序完全省略了对应插入 Honorif=(null) 的 Honorific 的任何引用。关于如何实现这一目标的任何想法?谢谢!

0 投票
2 回答
1226 浏览

c# - 在 JSON.NET + WebApi2/OData 中更改 Geography 的序列化

我有一个简单的 ADO.NET 实体模型,我正在使用 OData 公开它。实体模型中的字段之一是地理类型(SQL Server 中的地理)。我可以很好地查询数据,我得到以下地理列的序列化格式:

所以这行得通,但我希望我可以改变这个对象的序列化,使它更像:

诚然,这主要是为了美观,但最好有一个更简单的图表和更短的信息。

我写了以下我认为会有所帮助的课程:

并将其添加到我的 OData 配置中的 JSON 序列化程序设置中:

但这似乎没有什么不同。事实上,永远不会到达 CanConvert 中的断点,所以我倾向于认为我没有正确设置 JSON。

我也试过:

但这也没有效果。

希望有人能指出我做错了什么?