问题标签 [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 投票
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 投票
3 回答
6069 浏览

c# - OData V4 的 Web Api 不适用于 HasKey

我将 web api 2.2 用于 odata v4,以下是模型:

以下是 WebApiConfig.cs 代码:

到现在为止,每件事都运作良好。但是,如果我从 UserRole 定义中删除 [Key]。并使用代码:

当我查询用户时,我总是得到告诉用户角色没有键定义的错误。

我已经上传了源 porject 文件@https ://cloud.seafile.com/f/bdff340ec3/ 请检查 webapiconfig.cs User.cs UserRole.cs 和 web.config(用于数据库连接字符串)。当你访问 /odata/Users?$expand=UserRoles 你会得到错误

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 投票
0 回答
136 浏览

asp.net-web-api - WebAPI OData v4 - 使用类来表示动作的参数

我想向我的 OData 控制器添加一个操作。我将使用与以下结构匹配的请求正文和以下验证要求来调用此操作:

使用普通的 ApiController,我通常会让我的控制器方法简单地采用这种类型的参数,并且它会起作用。对于 OData,看来我必须使用 ODataActionParameters 参数来实现我的方法。

我不知道我应该如何告诉 OData 请求的正文应与上述内容匹配。我最接近的是让它在一个参数中期望它:

但这需要我发送

当我想发送的只是

我知道我可以将我的类的属性指定为单独的参数,但这会更难维护,而且我会丢失数据注释验证。有没有办法处理这个?

0 投票
1 回答
460 浏览

c# - 带有 oData V4 客户端生成器的 AADL

我正在尝试使用 Azure Active Diretory Library 在 Web 应用程序和 OData V4 WebApi 之间实现身份验证。我使用 SQL 对用户进行身份验证,所以我不需要使用 AADL 对他们进行身份验证,只需对应用程序进行身份验证。我在互联网上看到了几个演示,但没有一个做这种事情。主要问题是我的 Web 应用程序正在使用 OData 客户端生成器,所以我不需要打开 HttpClient 请求来调用我的 API,我只是使用上下文来执行它。考虑到这种情况,如何保护我的 odata api 仅供我的 Web 应用程序使用?这是我的代码的一些示例。

我的 Odata 控制器之一

这是我在 Web 应用程序中调用此控制器的方式

一切都直接来自我的 OData Client .cs 文件

这是我第一次使用 odata,效果很好,但我需要保护我的 API。

谢谢

0 投票
2 回答
4323 浏览

odata - 在 Web API 2.2 上将 $select 和 $expand 与 Odata v4.0 一起使用时出错

我有一个为 OData v4 配置的 web api 2.2。我想按 ID 返回用户,并且只包含用户所属的用户组 ID。当我这样做时

我收到这个错误

URI 中指定的查询无效。在 select 子句中找到具有多个导航属性的路径。请改写您的查询,以便选择或展开的每个级别仅包含 TypeSegments 或 Properties。

在 select 子句中找到具有多个导航属性的路径。请改写您的查询,以便选择或展开的每个级别仅包含 TypeSegments 或 Properties。

如果我删除“,userGruops/id”,查询将执行

0 投票
1 回答
730 浏览

c# - 如何从 Odata V4 中的另一个实体返回字段

我正在开发一个 Odata v4 项目,并希望从我的结果集中的另一个表中返回一个字段。

所以我有2张桌子

帐户:ID、姓名、地址、颜色代码、

产品:Id、AccountId

AccountId 是映射到 Account 表中的 Id 字段的外键

我有以下部分课程

我的控制器:

这会从 Product 数据实体返回数据,但我似乎无法在结果集中获取 ColorCode 字段。

我怎样才能实现上述

0 投票
1 回答
4143 浏览

odata - How to join 2 entities in Odata model builder

I am currently using OData V4 and wish to join 2 tables Account and Product:

The tables are as follows: Account: Id, Name, Address, ColorCode,

Product: Id, AccountId

AccountId in the Product table is a foreign key mapped to the Id field in the Account table

In my builder I have :

When I build the Product entity I wish to get the "ColorCode" values from the Account entity.

How can i establish this relationship in the model builder?

I would like the product class to look like this:

0 投票
2 回答
2225 浏览

asp.net-web-api - 如何在代码中定义(可选)导航属性 (?$expand=)?

首先是解释和要点,然后是问题。所以:

假设我AccountView首先在 EF (6.1.1) 数据库 (edmx) 中定义了一个视图,因此代码生成的类是

然后我在同一个命名空间(Entities)中创建一个部分类

然后在WebApiConfig我写或尝试在 OData v4(最新的,6.9.0.0 系列与 WebApi,也是最新的)中的一些东西如下

结果$metadata就像

问题:TODO评论中所述,我应该如何定义

  • 一个导航属性,以便我可以调用http://example.com/Accounts?$expand=Companyhttp://example.com/Accounts?$Companies

现在,如果我打电话

  • http://example.com/Accounts或者
  • http://example.com/Accounts(someId)

然后,如果我做类似的事情

  • http://example.com/Accounts?$expand=Companies
  • http://example.com/Accounts?$expand=Company或者
  • http://example.com/Accounts(someId)?$expand=Company

我受到HTTP 400 (?$expand=Companies) 或HTTP 500 (?$expand=Company) 的欢迎。

我已经成功地建立了Containment关系。不过,它看起来需要由 ID 定义根实体,而我想向根提供“GET”并可选地扩展为“子列表”对象(因此这个关于 ?$expand= 的问题) .

现在的案例是为一个实体完成一个非可选expand的,但我怀疑我想要的下一件事是有一个实体列表(或这个特定示例中的公司)但我怎么能实现这些场景?如何解决这种情况扩展到第一个始终存在的子对象的情况?

我的控制器定义如下

我基本上想要做的是首先向数据库添加更多元数据,edmx,视图并模仿文章Using $select, $expand, and $value in ASP.NET Web API 2 OData。到目前为止没有成功...

<编辑1:可以这么说,情节变厚了。HTTP 500 错误来自一个内部异常(我必须打开对托管框架异常的中断),它说

EntityFramework.dll 中发生了“System.NotSupportedException”类型的第一次机会异常

附加信息:LINQ to Entities 不支持指定的类型成员“公司”。仅支持初始化程序、实体成员和实体导航属性。

所以,是的,AccountView是一个视图,它与表没有直接的外键关系Company(它恰好是一个表,但它也可能是一个视图)。我怎么去加一个?正如信息所证明的那样,我虽然添加元数据已经成功了$metadata。OData 不只是INNER JOIN在数据库中写入一个吗?我在这里错过了什么吗?...这似乎与我添加Company参考的方式有关,而 EF 不喜欢那样。看来我应该只将它添加到 OData 模型中......

<编辑 2:如果我将 更改AccountView CompanyIdCompanyID以匹配Company

<edit3:我问了另一个与此相关的问题,How to add complex properties on a model build with ODataConventionModelBuilder from an EF model

0 投票
0 回答
1013 浏览

odata - 如何在使用 ODataConventionModelBuilder 从 EF 模型构建的模型上添加复杂属性

我有一个在 EF 数据库第一个 edmx 中定义的模型。从那里我公开了一些表格和视图(主要是视图)。由于可以使用 OData 扩充 EF 模型,我如何将复杂类型的导航属性添加到另一个 EF 和 OData 公开类型?

目前我定义了一个部分类并使用它们添加属性和属性。但看起来也可以使用 OData 的模型构建器功能添加所需的属性,或者更好的是,首先使用ODataConventionModelBuilder然后增加结果。唉,我无法从现有的 API 文档和我找到的示例中拼凑出一个工作示例。

这是代码

这与关于 OData 和模型的其他问题有关。