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

asp.net-web-api - DefaultODataBatchHandler 更改集

我正在使用 DefaultODataBatchHandler 以便能够一次接受多个 OData 请求,但希望将这些请求作为单个全有或全无操作(即单个事务)来处理。 

我的理解是,这就是变更集的用途。但是,如果我使用带有两个请求的更改集提交请求——第一个成功,第二个失败——那么它似乎没有这样做。第一个请求修改数据成功,第二个失败,但第一个请求仍然生效。

目前不支持这种原子批处理操作吗?

编辑:我正在使用最新版本 btw - Web API 2.2 w/ OData 4 support

0 投票
1 回答
1086 浏览

entity-framework - 从 Kendo Grid 执行 Web API Patch 操作时无法正确序列化导航属性

我目前正在使用 Web API v2 和 OData v3 链接到 Kendo Grid。我在让网格正确地将模型序列化为上的PatchEntityAsync方法时遇到问题。传递给方法的显然是不正确的。AsyncEntitySetController<TEntity, TKey>Delta<TEntity>PatchEntityAsyncnull

首先,实体框架模型。我有一个GameSeries定义:

然后是Game定义,每个Game实例都有一个实例的引用GameSeries

查询使用 JSON 并在属性上Game发出一个时,我得到以下内容,这是预期/正确的:$expandGameSeries

我通过 OData Web API (Microsoft.AspNet.WebApi.OData 5.2.0) 端点将这些暴露给 Kendo UI Grid。这是网格的配置:

这将正确呈现网格,我将在其中GameSeries.Description显示而不是GameSeries.

但是,我相信部分问题来自我如何定义自定义编辑器,特别data是 Kendo 所需的属性:

我觉得我应该使用点符号来引用实例GameSeries上的属性Game,但我不确定如何。

此外,我相信这里的绑定导致 create 命令失败。应该有一些方法来设置数据绑定属性,这将允许新的创建,以及编辑现有的。

但是,当我让编辑器为现有实例弹出时,它会正确地使用填充了所有实例的下拉列表GameSeries

我可以进行更改,当我这样做时,我通过 Fiddler 注意到身体正在通过,尽管我注意到一些差异:

在这种情况下,GameSeriesId属性正确填充了更改(我想要4),但扩展GameSeries属性的“GameSeriesId”为 1。

进行此调用时,Delta<Game>传入的实例为空。

我试过的:

我注意到GameSeriesId扩展GameSeries属性上的属性没有被字符串化。我已将值更改为"1"" 并且Delta<Game>实例仍然为空。

我已复制对 OData 点的调用以不包含扩展GameSeries属性,因此有效负载如下所示:

并且Delta<Game>人口众多。我不确定GameSeries从有效负载中删除扩展属性是否是正确的方法,或者是否应该在服务器端或剑道网格中解决它。

0 投票
2 回答
1160 浏览

c# - asp.net odata web api $select 相关实体失败

我的实体

当我运行查询 /odata/A/1?$select=Name 时,我得到的 json 只有一个字段,名称。但是当我运行查询 /odata/A/1?$select=b 时,我得到了异常的输出

请为这个问题提出任何解决方案。

谢谢

0 投票
1 回答
699 浏览

c# - OData $expand 产生奇怪的错误

当我尝试使用带有 $expand 的 OData 查询时,会产生以下错误:

我不确定我做错了什么,而且谷歌并没有真正揭示这个错误背后的太多信息。该项目的所有引用都很好,并且所有其他 OData 查询都按预期工作。

以下是相关的数据模型:

}

当我尝试使用以下 OData 查询时会产生错误:

http://apilinkhere.com/api/viewlink?$top=1&$expand=View/ViewType

我需要在某处更改设置吗?我只是想在我做错的事情背后被引导到正确的方向,并了解这里发生的事情。我不想在以后的项目中继续出现这个错误。

如果还有其他需要,我会尽力制作。

编辑:

我正在使用 Web API OData。

0 投票
1 回答
1526 浏览

odata - ASP.NET Web api 中的 OData V3 操作未触发

我正在使用带有 webapi 2.2 的 asp.net 的 OData V3 端点。我已经成功地用它实现了 CRUD 操作。现在,我想添加一些自定义操作以及 CRUD 操作。我已按照文章(http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/odata-actions)使用 OData V3 创建操作网页 API。

当我输入

网址:

它引发以下错误:

我还尝试为不可绑定的操作添加自定义路由对流。(https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v3/ODataActionsSample/ODataActionsSample/App_Start/WebApiConfig.cs)不确定我是否必须使用它。

这是我的代码:

WebApiConfig.cs :---

CoursesController.cs:----

全球.asax:----

我在网上做了研究,找到了这个链接。Web API 和 OData- 传递多个参数但这个是针对 OData V4 的。我正在使用 OData V3 和 Action。

谢谢,

0 投票
1 回答
117 浏览

entity-framework - 从基于某事的实体框架查询中删除数据

我的应用程序有一些特权信息,某些用户不允许看到的成本。该应用程序使用 WebAPI OData 将数据拉入 AngularJS 单页应用程序,然后隐藏或显示数据。

显然这并不理想,任何精通技术的用户都可以只检查网络流量,然后查看成本。

有没有办法在它进入我的 BL/Service 层之前从源头的实体框架查询中删除这些数据?

我认为投影可能会有所帮助,但它会破坏 .Include 功能,这会破坏我的 OData $extend 功能。我目前没有首先使用代码,但如果有帮助,我愿意切换。

我担心我最好的选择是放弃 OData 并自己在 BL 或 Web 服务边界删除数据。

谢谢

0 投票
1 回答
413 浏览

breeze - 更新到 Microsoft.AspNet.WebApi.OData 5.3.x 后无法将数据保存到 OData 控制器

不确定到底发生了什么变化并导致了这个部分错误(因为它没有在检索数据时发生)但是在将 Microsoft.AspNet.WebApi.OData 库更新到 5.3.x 版本后,微风在将数据保存到 OData 控制器时出现问题。这是关于批处理请求的网址。

也可以用微风自带的示例OData项目复现;
http://www.breezejs.com/samples/breeze-web-api-odata

如果您查看ExecuteRequestMessagesAsyncBatchHandler 类的方法,RequestUri项目的属性包含两次 OData 路由前缀。

Microsoft.AspNet.WebApi.OData 库 5.2.2 网址

Microsoft.AspNet.WebApi.OData 库 5.3.1 网址

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

微风版本:1.5.1

0 投票
0 回答
967 浏览

c# - 在 OData 中使用包含的导航属性时出现异常

我在对使用包含的 OData 服务进行一些测试时遇到异常。我正在运行 Web Api 2.2 / Web Api OData 5.3 / OData Lib 6.8 并使用 EF 6 在后端使用 SQL Server。这是我的数据模型:

Product实体的Parts集合被标记为包含,所以Parts不能直接查询,只能通过Products实体集查询。以下 URL 产生预期结果:

但是当我尝试从 Parts 实体获取 Supplier 时,我在数据服务中得到以下异常:

产品(1)/零件(3)/供应商:

用户代码未处理 Microsoft.OData.Core.ODataException
HResult=-2146233079
消息=找不到导航属性“供应商”的目标实体集。这很可能是 IEdmModel 中的错误。
Source=Microsoft.OData.Core
StackTrace:在 Microsoft.OData.Core.UriParser.Parsers.ODataPathParser.CreateNextSegment 上的 Microsoft.OData.Core.UriParser.Parsers.ODataPathParser.CreatePropertySegment (
ODataPathSegment 以前,IEdmProperty 属性,字符串 queryPortion)
)
在 Microsoft.OData.Core.UriParser.Parsers.ODataPathParser.ParsePath( ICollection`1segments)
在 Microsoft.OData.Core.UriParser.Parsers.ODataPathFactory.BindPath( ICollection`1segments, ODataUriParserConfiguration 配置)
在 Microsoft.OData.Core.UriParser.ODataUriParser.ParsePathImplementation()
在 Microsoft.OData.Core.UriParser.ODataUriParser.Initialize()
在 System.Web.OData.Routing.DefaultODataPathHandler.Parse(IEdmModel 模型,字符串 serviceRoot,字符串 odataPath, Boolean enableUriTemplateParsing)
在 System.Web.OData.Routing.DefaultODataPathHandler.Parse(IEdmModel 模型,字符串 serviceRoot,字符串 odataPath)...

如果我转到 Parts 实体并将供应商导航属性标记为包含,它可以正常工作:

但是,这似乎不是处理此问题的正确方法。这将要求每个实体知道它是否可以通过包含导航属性从任何其他实体导航到,然后如果可以,则将其所有导航属性也标记为包含,以便可以导航整个链。

这种行为是设计使然吗?还是我还缺少其他可以解决此问题的东西?

编辑:

根据要求,这里是此过程中的其余代码:控制器、允许包含 Parts 实体的自定义路由约定、允许我们调试异常的自定义 ODataPathHandler 以及所有连接的 WebApiConfig。

0 投票
2 回答
633 浏览

asp.net - Breezejs Web api OData 方法不允许

我在尝试查询我的 Web API OData 服务时遇到 400、404 或 405 错误。

我的远程服务名称配置为:

在我的 entityManagerFactory 我有 Odata 集:

在我的数据上下文中,我正在调用:

我目前收到错误:

我可以在浏览器中很好地访问此路径。我找到了一些资源建议我需要在我的 web.config 中设置 httpProtocol,如下所示:

但这只是给了我一个

我还尝试从 IIS Express 的 applicationhost 配置文件中设置这些设置,但这给了我以下信息:

我还听说将以下设置添加到 WebApiConfig 应该可以工作:

但我没有看到任何效果,或者我尝试过:

这也没有效果。由于我已经用尽了我在网上找到的所有资源,我看不出还有什么遗漏。

我正在使用 Visual Studio 2013 express 并使用 IIS express。

0 投票
1 回答
552 浏览

c# - OData v4 Web Api 中的星期几函数

看起来没有任何内置函数可以使用基于此处文档的函数来获取星期几:

http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html

我想要的是一个 Web Api 2.2 OData V4 实现,它可以为这样的 url 请求提供服务:

/meeting?$filter=dayofweek(StartDate) eq '星期三'

或类似的东西。但此刻,这似乎是一场白日梦。有人可以展示如何做到这一点吗?是否必须使用这样的东西来完成?

然后