问题标签 [restier]

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 回答
61 浏览

data-access-layer - 从外部 DBcontext 提供数据

我有单独的 DAL,需要从中提供 restier 控制器。是否可以使用另一个程序集的 dbcontext ?

我也在尝试它,但是在连接到 dbcontext 的字符串上出现错误。

0 投票
0 回答
86 浏览

c# - 如何访问 RESTier Operation 中的查询选项

我已经为我的 EF6 数据库模型配置了一个 RESTier 接口,并定义了一个将国家代码作为参数的操作。

此操作返回公司库存中的产品列表(InvMaster 类型的对象),每个 InvMaster 对象具有来自各种供应商价目表的一个或多个价格。JSON 模型如下所示:

在操作中,我使用传入的国家/地区代码以及其他一些逻辑来确定可用价格的优先级,并返回库存商品以及一系列订购价格。但是,我只希望对客户端应用程序上显示的项目执行此排序逻辑(即:在应用 $filter、$skip 和 $top 逻辑之后)

例如,如果在我的客户端应用程序中,用户每页选择 50 个项目,则 $top=50&$skip=?? 将作为查询选项与对我的操作的调用一起发送。最终,正确的数据被发回,但在我的操作中,我正在遍历我的库存中的每一个项目并排序价格,然后查询选项最终被用于仅过滤出请求的条目。我需要在执行计算之前应用查询选项,否则这是一个非常慢的操作,每次请求带有价格的项目时都会做一大堆无用的工作。我对如何实现这一点的理解是在操作中使用查询选项......我想这些将是 OdataQueryOptions......但我不知道如何访问这些。请帮忙。

下面是操作的基本结构:

0 投票
1 回答
838 浏览

asp.net-core - 如何实现最小控制器

我有一个 ASP.NET Core 1.1 Web 项目。

我已经安装了Microsoft.OData.Core并按照链接下的“入门”并按照http://odata.github.io/

该页面上的以下两个链接均适用于 .Net 45

  • “<a href="http://odata.github.io/RESTier/#01-01-Introduction" rel="noreferrer">使用 RESTier 库构建 OData v4 服务”</li>
  • “<a href="http://odata.github.io/WebApi/#01-02-getting-started" rel="noreferrer">使用 OData WebApi 库构建 OData v4 服务”</li>

这个月旧的SO 答案链接到Microsoft.AspNetCore.OData,它不属于 Microsoft,最后一次更新是一年多前。

这个SO 答案意味着“ASP.net 核心中的 OData 支持”

但是,我看到这个第三方解决方案AutoODataEF.Core可以自动生成控制器。

最后,我看到这个git 问题表明 ASP.Net Core 的 OData WebAPI 即将推出,但最终目前不可用。

假设我有一个 Person 模型和一个 EF DbContext。

如何实现最小的 OData 控制器?

0 投票
1 回答
115 浏览

c# - RESTier PUT/PATCH 未被调用

目前我正在开发一个安装了 RESTier 1.0 NuGet-Package 的项目。我正在使用带有一些 DTO 的自定义模型构建器。为了构建 API,我使用从 ODataController 继承的控制器。查询或发布数据到目前为止没有问题。

当我尝试使用 PATCH 或 PUT 请求更新记录时,不会调用相应的控制器操作,而是得到异常。

  1. 首先我确实得到了 ChangeSetPreparer is missing exceptions。
  2. 更改后,我确实得到了空引用异常。

所以为了避免第一次,我添加了一个 ChangeSetInitializer 和一个我在一些 Github-Source 中找到的 SubmitExecutor (我不记得了):

添加这些之后,第一个问题似乎得到了解决,但是我得到了以下堆栈跟踪的空引用异常:

bei Microsoft.Restier.Publishers.OData.RestierController.CreateResult(Type resultType, Object result) bei Microsoft.Restier.Publishers.OData.RestierController.CreateUpdatedODataResult(Object entity) bei Microsoft.Restier.Publishers.OData.RestierController.d__3f.MoveNext( ) --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task 任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft .Restier.Publishers.OData.RestierController.d__20.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) bei System.Threading.Tasks.TaskHelpersExtensions.d__3`1.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Runtime .CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, A dem die Ausgelöst wurde --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在 System.Web.Http.Controllers 之后。ActionFilterResult.d__2.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) bei System.Web.Http.Controllers.ExceptionFilterResult.d__0.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Web.Http.Controllers.ExceptionFilterResult。 d__0.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter。HandleNonSuccessAndDebuggerNotification(Task task) bei System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei System.Web.Http.Dispatcher.HttpControllerDispatcher .d__1.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task) bei System.Web.Http.HttpServer.d__0.MoveNext()HttpControllerDispatcher.d__1.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (任务任务) bei System.Web.Http.HttpServer.d__0.MoveNext()HttpControllerDispatcher.d__1.MoveNext() --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (任务任务) bei System.Web.Http.HttpServer.d__0.MoveNext()

这些是我使用的动作签名的示例:

我尝试了与 DTO 匹配的各种 JSON 对象,但即使在调用 Put 或 Patch 之前,我仍然会收到空引用异常。

0 投票
1 回答
165 浏览

c# - Restier - 实体框架 - LOADMEMORYQUERY

我正在使用位于实体框架和 Web API 之上的Restier 。当我与 $top 运营商通话时:

拦截器调试器捕获的查询结果如下:

最终对以下数据库运行第一个查询:

如何避免 LOADMEMORYQUERY 调用?这是一个非常大的数据集,我宁愿只从数据库中提取我需要的数据。

0 投票
1 回答
184 浏览

c# - 在运行时动态地将数组添加到资源中

我有一个习惯ODataResourceSerializer,它在某些情况下会为资源添加新属性,效果很好。

我正在尝试添加一个新的简单 int[] 属性

该资源是在运行时注册的动态资源,在模型上没有这些属性。

这段代码

当资源被发送到ODataJsonLightPropertySerializer.WriteCollectionProperty

模型无法解析名为“System.Int32[]”的类型。当模型可用时,每个类型名称都必须解析为有效类型。

并尝试将值直接添加到 odata 属性

我继续添加

ODataPrimitiveValue 被实例化为“System.Int32[]”类型的值。ODataPrimitiveValue 只能包装可以表示为原始 EDM 类型的值

我尝试将 int[] 添加到模型构建器 我尝试将类型添加到 ODataCollectionValue

0 投票
1 回答
44 浏览

c# - 如何在restier asp.net中有两个以上的扩展

我有一个 RESTier 服务,我需要在浏览器 URL 中使用两个以上的扩展,如下所示:

我不能为这项服务制作任何控制器。如果您在我的网址中看到,您可以理解我必须在四个表之间导航。这些表是 Customers 、 Bns 、 Parvandes 、 ParvandeStateLogs。我怎么解决这个问题?

0 投票
0 回答
18 浏览

dependency-injection - 是否可以使用 Unity 作为与 Restier 结合使用的 DI 框架

我一直在将 WebApi 与 Odata 一起用于一项服务,并且进展顺利。然后我遇到了 Restier 项目,它似乎非常适合我正在做的事情。但是,我使用 Microsoft Unity 来支持我的 DI 并希望继续这样做,但我似乎找不到任何与 Restier 一起这样做的信息。

看起来(查看源代码)Restier 在内部默认使用默认的 DI 框架。从我在网上看到的情况来看,它应该是可以交换的,但我没有运气这样做。

这甚至可能吗?

0 投票
0 回答
39 浏览

asp.net-core - 是否有在 ASP.NET Core 中使用 Restier 的快速入门?

我一直在寻找 ASP.NET Core 中 Restier 的任何快速入门。

https://www.nuget.org/packages/Microsoft.Restier.Core/1.0.0-rc1.20191105.1

但我发现的一切都与 ASP.NET Core 无关,而是与 .NET Framework 相关。

也许有人已经使用过它并且可以给我一些开始的步骤?

或者除了 Restier 之外的其他东西,但仍然使用 ASP.NET Core?