使用 ODataQueryOptions 扩展导航属性

2024-04-10

我正在构建一个 OData v.4 Web 服务,该服务必须公开从另一个第 3 方 Web 源检索的数据,因此该数据与 LINQ 世界中的任何内容都不相同,即:没有 IQueryable,没有 Context,什么都没有。

解决方法似乎是手动处理来自 ODataQueryOptions 的参数并返回简单的项目序列。因此,控制器方法应该如下所示:

class MyMasterEntity {
    [Contained]
    public IEnumerable<MyDetailEntity> Details { get; set; }
}

// [EnableQuery]
public IEnumerable<MyMasterEntity> Get(ODataQueryOptions<MyMasterEntity> options)
{
   // process .FilterQueryOption
   // process .SelectExpandQueryOption
   // process .SkipQueryOption
   // process .TopQueryOption
   return myMasterEntityList;
}

这很有效,除了$expand=Details,在这种情况下,属性不会在结果响应中扩展,尽管我的逻辑将它们添加得很好。

如果添加[EnableQuery]属性(一开始就没有意义,因为它与 ODataQueryOptions 的整个思想是互斥的),然后扩展开始工作。或者更确切地说pretends工作,因为真正发生的是查询被处理两次:第一次由我的代码处理,然后在我返回数据后由 OData 机器处理。这可能是可以忍受的(无论如何,我手动执行昂贵的调用,因此 OData 重试已准备好的数据没什么大不了的),如果不是因为第二遍会破坏像 $skip 这样的非确定性操作。 (即:可以多次应用 $top 来获得相同的结果,但不能使用 $skip 来执行此操作)。

正如我从逆向工程相关程序集了解到的,标准扩展代码将实体包装成某种东西,这告诉 JSON 格式化程序发出相应的属性,无论它们是否实际上在实体内扩展。

还尝试过:

  • 更改返回类型(IQueryable、IHttpActionResult)
  • 强制呼叫SelectExpandQueryOption.ApplyTo(myMasterEntityList, new ODataQuerySettings())手动扩展之后,返回之前

如何正确扩展导航属性?


为什么要手动处理查询选项?

Use the AsQueryableLINQ 扩展方法将您的数据转换为可查询的集合(实际上您正在使用 LINQ to Object)。

  • 你的控制器必须继承自ODataController
  • An IEdmModel必须与路线相关联。使用 ODataModelBuilder(或 ODataConventionModelBuilder)定义它。
  • 你的方法必须返回IQueryable<MyMasterEntity>
  • 仅声明[EnableQuery]。不要显式声明ODataQueryOptions争论
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ODataQueryOptions 扩展导航属性 的相关文章

  • 如何在 dotnet core web api 中设置起始页?

    我尝试使用 dotnet core web api 构建一个 web 应用程序 但我不知道如何将 index html 设置为起始页 这可以使用 dotnet Framework Web api 轻松完成 我尝试使用app UseDefau
  • Web API 通用操作

    我有一个 http 操作 需要采用两个不同的对象模型 实现查看两个模型对象并知道此时要做什么 我可以使用通用对象吗 HttpPost public IHttpActionResult InsertData string accessKey
  • Swagger WebApi 在构建时创建 json

    有什么方法可以在我的 Web api 的构建任务期间创建 swagger json 吗 我想使用 json 将其输入代码生成器并生成打字稿定义文件 非常欢迎任何帮助 我在用着虚张声势 AspNetCore Cli 注意 我使用的是 NET
  • Web API ODataResult 始终序列化为 Atom

    我正在从新返回 ODataResultWeb API OData包 http blogs msdn com b alexj archive 2012 08 15 odata support in asp net web api aspx如下
  • 在 WebAPI 中返回 null 的空 json

    webApi 返回 null 对象时是否可以返回 而不是 null 这是为了防止我的用户在解析响应时出现错误 并使响应成为有效的 Json 响应 我知道我可以在任何地方手动设置它 当响应为 null 时 应返回一个空的 Json 对象 但是
  • 在asp.net core中将字典发布到web api

    我有使用开发的简单 Web apiAsp Net Core我正在尝试使用 HttpClient 发布键值对 我尝试了两种方法 第一种方法 Route api controller action public class Transforma
  • 在 Web API 2 中返回字符串

    听起来很简单 我还没有找到任何关于这方面的文档 也许我的措辞是错误的 所以如果是这样 一些关于这方面的好的文档将不胜感激 我只想返回一个字符串或字符串类型的模型 return string here 我每次都会收到此错误 Severity
  • 启用 WCF 数据服务默认接受/返回 JSON

    我有一个 WCF 数据服务 我希望默认情况下为所有操作返回 JSON 我可以在配置 通过服务属性中设置它吗 为了通过 format 标签启用 json 如下所示 host 8038 YourService svc format json 将
  • 为什么不调用 GrantRefreshToken 方法 - Oauth2 ASP.NET Web API

    我使用请求正文向 oauth2 服务器发送请求 grant type refresh token refresh token abc 我将refresh token保存在数据库中 接收异步方法 public async Task Recei
  • 在 Asp.net Web API 中处理 CORS 预检

    我的架构中有三个应用程序 它们位于同一服务器上 但具有不同的端口号 A Token Application port 4444 Asp net WebApi B API Application port 3333 Asp net WebAp
  • 从 WebAPI 发送大文件。内容长度为 0

    我正在尝试将大文件 GB 从一个WebAPI NET Core 发送到另一个WebApi Net Core 我已经设法发送较小的文件作为多部分请求的一部分 就像上一篇文章中那样 link https forums asp net t 209
  • ASP NET Web API 路由模板

    我有一个名为 Agency 的实体 具有以下 api GET http localhost 37331 api agency start 1 limit 10 status 1 GET http localhost 37331 api ag
  • ASP.NET Core Web API 模板中没有个人用户帐户身份验证选项

    我有点困惑为什么最新的 ASP NET Core Web API 模板中没有个人用户帐户身份验证选项 是否仍然可以按照 MVC 模板的方式实现个人用户帐户 或者是否有意义 假设我正在创建一个独立的 Web API 它将包含我的所有业务逻辑和
  • .NET Web API - 添加日志记录

    我正在寻找有关处理 API 日志记录的最佳方法的帮助 我想将所有请求和响应记录到 sql 或文本文件 如果这是最好的方法 目前我已经在 SQL Server 的日志表中插入一行 我使用名为 LogAction 的静态方法来执行此操作 并在
  • 如何强制 Web API 识别查询字符串参数

    ASP NET MVC4 Web API v1 控制器定义如下 它应该接受 1 或 2 个查询字符串参数 然而 如果调用方法 ko 参数始终为 null 请求如下 如何修复以便 kclient 或 namepart 参数可以在查询字符串中传
  • 无法从 Web api POST 读取正文数据

    我正在尝试从新的 Asp Net Web Api 中的请求中提取一些数据 我有一个像这样的处理程序设置 public class MyTestHandler DelegatingHandler protected override Syst
  • ASP.Net Web API:在读取/上传请求正文之前发送响应

    我的控制器上有一个操作 应该上传大型 500mb 2gb 文件 例如 HttpPost public void PostFile FromUri Guid uploadId 在正文内部 执行一些检查 例如 uploadId 是否存在 然后将
  • Asp.Net Core 挑战返回 Null URI 异常错误

    我正在创建 ASP NET Core Web API 并希望集成 Microsoft Azure AD 身份验证服务 在编译时一切正常 但是 当我访问旨在返回挑战的路由时 我收到一个 null URI 异常 下面的 Stacktrace 我
  • Dockerize 一个网络核心 Web api

    我正在尝试对 aspnetcore webapi 进行 dockerize 我按照这里的教程进行操作 https docs docker com engine examples dotnetcore https docs docker co
  • 将结果绑定到不同项目中的 Web API

    我正在尝试创建一个 SPA 应用程序 以利用upshot及其能力 但是 公开数据的服务 即 Web API 位于一个完全独立的项目中 已托管在 IIS 上 我想将结果绑定到现有的 API 但从我在结果 v1 0 0 1 的 HTML 帮助程

随机推荐

  • PHP - Postgresql 如果返回错误,如何回滚查询?

    我正在使用 php 和 postgres 进行 CRUD 我想知道如果出现错误是否有办法回滚事务 实际上 如果我在事务中遇到错误 id 主键 就会增加 然后我会丢失一个 id 以供将来使用 我该如何预防 我的意思是 如果插入查询失败 不要在
  • 套接字无法连接到端点

    var socket new Socket localhost 4000 socket connect Returns WebSocket connection to ws localhost 4000 ws failed Error du
  • 扩展 Backbone.Collection 原型

    继从这个问题 https stackoverflow com questions 10219182 retrieve element from backbone collection removen 我正在尝试使用一些自定义方法来增强 Ba
  • AWS lambda函数在超时错误后停止工作

    我有一个简单的 lambda 函数 它异步进行 API 调用 然后返回数据 99 的情况下这都非常有效 当 API 花费的时间超过 lambda 配置的超时时间时 它会按预期给出错误 现在的问题是 当我对 lambda 函数进行任何后续调用
  • Xcode 5 中的代码签名

    我在 Xcode 5 中验证我的应用程序时遇到问题 我在 2 周前提交了更新 Xcode 4 正常 我没有触及任何证书或配置文件 当我尝试验证时 我得到 当我尝试下载身份时 Xcode 崩溃了 我进入偏爱 gt accounts并刷新了我的
  • 如何删除iOS应用程序中呼叫某人时的弹出窗口? [复制]

    这个问题在这里已经有答案了 我想建议用户从应用程序拨打电话 并弹出一个带有特定文本的窗口 我首先向他展示弹出窗口 如果他同意 然后我运行代码从应用程序拨打电话 但与使用无关tel telprompt tel 对于链接 我总是从系统中弹出第二
  • 使用 Flask wtforms 验证器而不使用表单

    我正在从 iOS 应用程序接收用户注册数据 我想使用 wtforms 附带的验证器来确保电子邮件和密码可接受 但是 我没有使用 Flask 表单 因为用户是从 iOS 文本字段输入数据 是否可以使用 wtforms 验证器检查传入的 JSO
  • 如果 Aurelia 理解“导入”,为什么还要使用依赖注入?

    我不明白 如果我可以使用import在 Aurelia 中 为什么我必须将构造函数与 autoinject 还有这一切 我确信我错过了一些东西 但是 据我所知 我可以随时使用导入的模块 import something from whate
  • 是否可以拥有不可变的 JPA 实体?

    在我们的 Hibernate 项目中 实体是使用 Java bean 模式进行编码的 我们的代码中有很多地方有人忘记设置变异器 并且由于以下原因我们得到了异常NOT NULL约束 是否有人使用构建器来构建他们的实体或使它们不可变 我正在尝试
  • 在 strace 中捕获 vDSO

    我想知道是否有一种方法可以捕获 换句话说观察 vDSO 调用 例如gettimeofday in strace 另外 有没有一种方法可以在不加载的情况下执行二进制文件linux vdso so 1 标志或环境变量 最后 如果我编写一个程序来
  • 使用java查找selenium对象标签

    我以前的代码工作没有问题 并且能够使用 selenium 在网页中找到对象标记 没有任何问题 我正在使用 Chrome 驱动程序来访问该页面 因为我注意到当我使用 IE 时 DOM 内部没有显示任何内容 并且我需要访问对象标记的内容 也就是
  • 运行进程隐藏的Python

    我是 python 新手 正在编写新代码 需要一些帮助 主要文件 import os import time import sys import app import dbg import dbg import me sys path ap
  • Internet Explorer 和剪辑路径

    据我所知 clip path 应该在 IE 中工作 如许多文章和本教程中所示CSS 屏蔽 http www html5rocks com en tutorials masking adobe redirect from locale fr
  • 创建自签名 SSL 证书时出错

    我尝试根据链接中的说明创建自签名证书mosca MQTT 代理的安全密钥和证书 https stackoverflow com questions 39913842 security key and cert for mosca mqtt
  • 将实体框架中的字符串列映射到枚举

    有没有办法将字符串列映射到实体模型中的枚举 我已经在 Hibernate 中完成了此操作 但在 EMF 中无法弄清楚 可能是更好的版本 OrderStateIdentifier 字段用于 JSON 序列化和数据库字段 而OrderState
  • Spring Boot MongoDB 连接问题

    我的 Spring Boot 应用程序正在尝试连接到 MongoDB 数据库 配置添加到 application yml 文件中 直到昨天 该应用程序在本地运行得完全正常 但是今天当我在本地主机上本地运行它时 我收到以下错误 2020 12
  • ngClass 中的多个类

    我正在尝试在 ngClass 中添加多个值 该值过去适用于以前的 alpha 版本 但现在似乎不适用于 angular2 beta i i 它会产生一个错误 异常 类型错误 无法读取未定义的属性 add fa fa star 在 PostV
  • 策略模式和命令模式的区别

    两者有什么区别策略模式 http en wikipedia org wiki Strategy pattern和命令模式 http en wikipedia org wiki Command pattern 我也在寻找一些 Java 的例子
  • 我可以将其序列化为 json 字符串并查看它,而不是使用反射来循环访问类属性吗?它有什么缺点吗?

    假设我有一个像下面这样的课程 class Student public int ID get set public string Name get set 只是还有 10 个属性 我想循环遍历这些属性 我可以通过反射来完成 这会有性能成本
  • 使用 ODataQueryOptions 扩展导航属性

    我正在构建一个 OData v 4 Web 服务 该服务必须公开从另一个第 3 方 Web 源检索的数据 因此该数据与 LINQ 世界中的任何内容都不相同 即 没有 IQueryable 没有 Context 什么都没有 解决方法似乎是手动