问题标签 [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 回答
8351 浏览

c# - 我可以更改用于我的 ODataController 请求的 ODataQueryOptions 吗?

更新

在用户语音上投票以解决歧义。


我编写了一个继承自ODataController.

此代码运行,并在传递给方法的属性中OrderByNode添加了一个额外的内容。OrderByODataQueryOptions

问题

此更改对控制器生成的语句没有影响。处理继续进行,就好像我什么都没做一样,任何OrderBy 应用于实体的东西都被原始请求的参数中指定的原始ManyColumns值替换。OrderBy$orderby

在进一步的检查中,它似乎ODataQueryOptions可能是不可变的。它的大部分属性只有get访问器。

问题

我是否只是在实施中滥用了失败OrderByQueryOption

有没有办法修改ODataQueryOptions将应用于请求的,稍后在管道中?

0 投票
1 回答
219 浏览

asp.net-mvc-5 - JayData 在使用 kendoGrid 创建实体期间使用 WebApi v2 Odata 的行为不正确

这是我的控制器:

//-------- 当我“添加新记录”或“保存更改”时,两个请求被发送到服务器(GET 和 POST)。

我有一个错误:'result count failed ' at GET Response.

我在以下代码中发现了一个问题kendo.js

为什么innerInstance()在保存之前调用?我该如何解决我的问题?我Jaydata 1.3.6在 MVC 5 上使用剑道 ui 和 webApi2 Odata 请帮助我

0 投票
1 回答
602 浏览

asp.net-web-api - webapi 2 key delta patch update

Using le framework here

http://blog.longle.net/2014/03/04/harness-the-power-of-asp-net-mvc-web-api-odata-kendo-ui-requirejs-to-build-an-easy-maintainable-spa-for-the-net-developer-published/

and here

Web API + OData - PATCH request 400 error

how to send key delta in patch update of WebAPI 2 odata where kendo datasource "batch: true"

The key is always empty!!!

Does WebAPI odata supported by kendo?

0 投票
1 回答
997 浏览

asp.net-web-api-odata - 如何限制对 ASP.NET Web API OData 中某些属性或类的访问?

我有课:

我有 WebAPI OData 控制器:

另外我在 global.asax 中有下一个代码:

我想对非管理员隐藏属性 BirthDate 并且当当前用户不是那个人时。如何在 ASP.NET WebAPI OData 中更好地实现它?我有 CurrentUserId 与 person.Id 进行比较,我有 CurrentUserIsAdmin 标志要检查。问题是我无法通过 modelBuilder 向 Odata 模型添加条件,因为不支持这种行为 - 我只能为每个人完全删除实体或属性,但我需要将其展示给管理员和人们自己。

0 投票
2 回答
24395 浏览

c# - 控制器中操作的路径模板不是有效的 OData 路径模板

我收到以下错误:

控制器“客户端”中操作“GetClients”的路径模板“GetClients()”不是有效的 OData 路径模板。未找到段“GetClients”的资源。

我的控制器方法看起来像这样

我的WebAPIConfig文件有

我希望能够像这样调用odata rest api:

知道我做错了什么吗?

0 投票
1 回答
586 浏览

c# - Web API OData 中不允许将“容器”名称作为实体

我的实体列表包括一个名为“容器”的实体。(我的公司经常处理容器,这是一个相当“一成不变”的术语。)

因此,当我为它们建模数据时,我很自然地称它们为容器。

这意味着我有一个名为Container.

我刚刚为 Web API OData 连接了所有控制器,当我尝试使用它编译客户端时,出现错误。(我正在使用 WCF 数据服务客户端 nuget 包。)

错误是因为我的实体的Container部分类和另一个包含所有根级别集合的部分类,也称为Container. (注意:对于通过 OData 的 WCF 数据服务版本运行相同实体的服务,我没有收到此错误。)

所以,我的问题是:有没有办法调用一个实体Container并通过 Web Api OData 公开它?(并且不会得到客户端编译时错误)。

注意:如果您尝试重现这一点,如果名为“Container”的实体与也是根项目的某物有关联(因此它包含在名为“Cntainer”的 DataServiceContext 类中。例如,如果 Containers有一个可能的 ContainerTypes 列表,并且有一个 ContainerTypes 的根列表,然后部分类尝试合并并且存在冲突。

0 投票
7 回答
15189 浏览

c# - 每个实体的 Web API OData 安全性

背景:
我有一个非常大的 OData 模型,目前正在使用 WCF 数据服务 (OData) 来公开它。然而,微软已经声明 WCF 数据服务已经死了,而 Web API OData 是他们将要走的路。

所以我正在研究如何让 Web API OData 和 WCF 数据服务一样工作。

问题设置:
模型的某些部分不需要固定,但有些部分需要固定。例如,客户列表需要安全性来限制谁可以阅读它,但我还有其他列表,例如产品列表,任何人都可以查看。

客户实体有许多可以访问它的关联。如果您计算 2 级以上的关联,则可以通过数百种方式联系客户(通过关联)。例如Prodcuts.First().Orders.First().Customer. 由于客户是我系统的核心,因此您可以从大多数实体开始,并最终将您的方式与客户列表相关联。

WCF 数据服务有一种方法可以让我通过如下方法对特定实体设置安全性:

当我查看 Web API OData 时,我没有看到这样的东西。另外,我非常担心,因为当遵循关联时,我正在制作的控制器似乎没有被调用。(意思是我不能把安全放在里面CustomersController。)

我担心我将不得不尝试以某种方式列举关联可以如何接触客户并为每一个提供安全性的所有方式。

问题:
有没有办法在 Web API OData 中为特定实体设置安全性? (不必列举所有可能以某种方式扩展到该实体的关联?)

0 投票
12 回答
41919 浏览

.net - 如何让 Web API OData v4 使用 DateTime

我有一个相当大的数据模型,我想使用 OData V4 协议使用 Web API OData 公开它。

基础数据存储在 SQL Server 2012 数据库中。该数据库中有许多 DateTime 列。

当我连接它时,我收到一个错误,即 System.DateTime 不受支持。

所以这是我的问题,我该怎么做才能在 OData 提要中看到我的 DateTime 列?

注意:我无法返回并将所有列更改为 DateTimeOffset 列。

我尝试更改实体框架 edmx 中列的类型,但它给了我这个错误:

指定的成员映射无效。'MyProject.MyEntity' 类型中成员 'MyPropertyHere' 的类型 'Edm.DateTimeOffset[Nullable=False,DefaultValue=,Precision=]' 与 'SqlServer.datetime[Nullable=False,DefaultValue=,Precision=3] 不兼容'MyDataModel.Store.MyEntity' 类型中的成员 'MyColumnName'。

(基本上认为 DateTime 与 DateTimeOffset 不兼容。)

Web API OData 团队真的忽略了所有需要使用 SQL Server 类型的人DateTime吗?

更新:我找到了解决方法,但它们需要更新 EF 模型才能工作。如果可以避免的话,我宁愿不必单独更新数百个属性。

更新:这个问题让我意识到微软管理其 OData 产品的方式存在严重缺陷。有很多问题,但这个是最明显的。Web API OData 中有大量缺失的功能。 插入的事务和排序是其中的两个。这两个项目(在 OData 规范中并且在微软杀死它之前在 WCF 数据服务中)对于任何实际系统都至关重要。

但是,他们没有将时间花在那些缺少 OData 规范中的功能的关键点上,而是决定花时间删除对许多开发人员非常有帮助的功能。它集中体现了糟糕的管理,优先考虑删除工作功能而不是添加急需的功能。

我尝试与 Web API OData 代表讨论这些问题,最后,我打开了一个问题/票证,几天后又关闭了。这就是他们愿意做的事情的结束。

正如我所说,Web API OData 的管理还有很多问题(与 DateTime 无关,因此我不会在此列出)。 我一直是 OData 的坚定支持者,但 Web API OData 管理的明显问题迫使我和我的团队/公司放弃它。

幸运的是,普通的 Web API 可以设置为使用 OData 语法。设置控制器需要做更多的工作,但最终效果很好。它支持日期时间。(而且似乎拥有至少可以避免做出疯狂错误决定的管理层。)

0 投票
2 回答
6298 浏览

.net - 获取 XML 格式的 Web API OData v4 的 OData 目录

我正在尝试启动并运行 Web API OData V4 端点。

我终于开始了(在从我的端点中删除了所有 DateTime 属性之后),现在实体列表是 JSON 格式的。

我喜欢 JSON,但我使用 LinqPad 来测试我的端点。它不理解我的提要中的实体列表的 JSON。

我已经看过并且似乎找不到将其更改回 XML 的方法,所以我在这里问。

有没有办法让 Web API OData v4 提要的实体列表采用 XML 而不是 JSON?

0 投票
1 回答
12486 浏览

c# - OData v4 自定义函数

我正在尝试在 OData v4 Web API 解决方案中创建自定义函数。我需要根据 OData 无法本地处理的独特逻辑返回一组“订单”。我似乎无法弄清楚如何在不破坏整个 OData 服务层的情况下创建这个自定义函数。当我用 ODataRoute 属性装饰 Controller 方法时,一切都变了。任何基本请求都会产生相同的错误。有人可以看看下面的代码,看看你是否注意到我必须遗漏的东西?

WebApiConfig.cs

OrdersController.cs

向 OData 层发出 ANY 请求时,我收到以下错误响应。

控制器“订单”中操作“GetByExternalKey”的路径模板“GetByExternalKey(key={key})”不是有效的 OData 路径模板。未找到段“GetByExternalKey”的资源。