如何使用 WebApi2、OData 和 $expand 指定结果的形状

2024-06-22

当我将 OData 与特定的对象一起使用时,执行 AutoMapper 映射时遇到问题$select or $expand values.

使用 WebApi 操作:

    public IQueryable<BookInRequestDto> Get(ODataQueryOptions<BookInRequest> query)
    {
        var results = query.ApplyTo(_context.BookInRequests) as IQueryable<BookInRequest>;
        var mappedResults = Mapper.Map<IQueryable<BookInRequest>, IQueryable<BookInRequestDto>>(results);
        return mappedResults;
    }

当我查询时:api/Get,我得到了适当的响应,但是文档的Properties被设定为null包含设置为 null 的文档属性的响应。

当我查询时:api/Get?$expand=Documents/Properties,响应是一个空数组。

据我了解,这是因为 Select/Expand 改变了响应的形状,因此它不再匹配 BookInRequest 的 IQueryable,而是返回 IQueryable。

我很高兴返回该信息,但我需要能够应用 AutoMapper 映射。有什么办法可以强制执行查询结果的形状吗?

我有以下实体:

public class BookInRequest {
    //...
    public virtual ICollection<BookInDocument> Documents { get; set; }
}

public class BookInDocument {
    public ICollection<BookInDocumentProperty> Properties { get; set; }     
}

对应的 DTO 几乎相同,除了BookInDocumentDto:

public class BookInDocumentDto {
    public dynamic Properties { get; set; }
}

我的映射定义如下:

Mapper.CreateMap<BookInRequest, BookInRequestDto>();
Mapper.CreateMap<BookInDocument, BookInDocumentDto>()
        .ForMember(x => x.Properties, 
          y => y.MapFrom(z => 
                   DynamicHelpers.PropertiesAsDynamic(z.Properties)));

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 WebApi2、OData 和 $expand 指定结果的形状 的相关文章

  • 从 SQL Server 表中获取随机行数

    我正在尝试使用快速方法从一个大表 超过 100 万行 中获取 5 个随机行数 到目前为止 我已经使用这些 SQL 查询进行了测试 Method 1 Select top 5 customer id customer name from Cu
  • 使用 HttpSelfHostServer 时标头消失

    我正在将相当广泛的 REST 服务从 WCF 迁移到 ASP NET WebAPI 我们使用 Authorization 标头将令牌从客户端发送到服务器 并且我使用代码实现了一个 DelegateHandler 一旦发现没有有效的 Auth
  • 我应该使用 Web API 还是 Web 方法?

    我正在尝试了解 Web api 和一些有关 Web 方法的新闻 我听说我们应该停止使用一些来源的 Web 方法 此外 如果不再使用 Web 方法 Web API 是否会成为继任者 Web 方法是 ASMX 技术的一部分 ASMX 是一项遗留
  • MySql + 实体框架 = 每个派生表必须有自己的别名

    我必须从我的 C 程序访问另一个开发人员的一些 MySql 视图 因此 经过一番搜索后 我决定使用实体框架 并使用这个问题中提到的驱动程序 将 MySQL 与实体框架结合使用 https stackoverflow com question
  • 如何自动将实体模型更改部署到数据库?

    目前我使用 Visual Studio 数据库项目 因此我可以一键将更改部署到数据库并将数据保留在数据库中 现在我希望能够在实体框架中创建模型并一键部署 所以我得到了从实体框架创建数据库的sql脚本 我可以运行此脚本来创建数据库 但我想将数
  • 重构:从自定义数据访问层切换到实体框架

    我是一名 NET 开发人员 作为重构项目的一部分 我有几个问题 我们的软件当前使用 Active Record 模式 数据对象和业务对象之间的一对一映射 不好的是业务对象继承自数据对象 导致层之间的高度耦合 我们的目标是从自定义数据访问层
  • 从 LINQ 查询获取第一个结果 - 为什么 First() 成功时 ElementAt(0) 失败?

    我有一个方法添加学生 它查找同名学生 如果存在同名学生 则从数据库中返回现有学生 否则创建一个新学生并将其添加到数据库中 我很好奇为什么se students First
  • 如何在 ASP.Net Web API 中为特定控制器启用 Windows 身份验证

    我想知道是否有一种方法可以仅为特定 ASP Net Web API 控制器的特定操作启用 Windows 身份验证 我的 Web API Web 服务有几个具有多种操作的控制器 但只有一个控制器的一个操作需要 Windows 身份验证 此
  • 实体框架:为什么实体类的集合类型需要在默认构造函数中实例化?

    我正在使用 Visual Studio 构建代码优先模型北风自动数据库 我有一些疑问 我发现如果实体类有一个集合 那么该集合总是在默认构造函数中实例化 为什么我们需要这样做 The ICollection
  • 在 Visual Studio Team Services 中的托管构建代理上进行 Nuget 还原时,找不到 AutoMapper 包 5.1.1

    在 Team Services 以前的 VSO 中托管的构建代理上恢复 AutoMapper 确实是一个奇怪的问题 它只是失败并显示警告 无法找到 AutoMapper 包的版本 5 1 1 我们有一个自定义的私有 nuget 存储库 因此
  • 在 WebAPI OData 请求中包含相关实体

    有没有办法在 OData 请求中包含相关实体 例如 我有一个 Person 实体和一个 Task 实体 这种关系是一对多的 一个人有很多任务 如果我使用 OData 请求查询数据 odata Person 要获取所有 Person 实体 返
  • 如何使用 ASP.NET Core 设置 EF6 迁移

    我正在尝试采用吉米 博加德的Contoso大学核心项目 https github com jbogard ContosoUniversityCore 我想先进行代码迁移 但不确定如何正确设置它 我将 Migrator EF6 Tools 添
  • 在实体框架中不使用 Dispose 或 using()

    我一路上正在编写一个网络应用程序并学习实体框架 如果我做错了什么 我很好奇 我在查询时没有使用过 dispose 或 using 语句 我的存储库示例 public User GetUserById int sessionId var us
  • 访问 NavigationProperty 的关联详细信息

    我正在创建一个 C T4 模板来构建一些基于 edmx 文件的类 到目前为止一切顺利 不过 我现在需要的是一种通过以下方式访问它在数据库中连接的列的名称的方法 导航属性 http msdn microsoft com en us libra
  • 如何在不拉动所有对象的情况下编辑或添加到特定字段

    我怎样才能做到这一点 a myFavorits Add 而不将所有对象拉到 vara 因为a有很多数据 我不想全部拉出来a对象 但我找不到方法来做到这一点 我想做 lambda 和 linq 而不返回一些东西 但 linq 总是返回一些东西
  • Web API 帮助页面显示每个方法的两个版本

    如何避免帮助页面显示我的方法的两个版本 正如你所看到的 我已经设置了一条自定义路线 api property search finnId 但我不希望使用查询参数的那个出现在 帮助 页面中 有办法解决这个问题吗 我正在使用 ASP NET F
  • 是否可以通过 Windows 服务中的自托管 Web API 提供网页?

    我有一个完全正常的 TopShelf 托管 Windows 服务 我需要一个简单的服务接口 它将返回一些当前的统计信息 保存在内存中 我有一个狡猾的计划 要在服务中自托管一个网站 并且我发现 asp net API 具有自托管功能 是否有可
  • 为什么更新外键后引用约束会不一致?

    抱歉 这个模糊的标题很难用一句话来描述 我有 2 个实体User and UserAddress 其中 User 有 2 个外键DefaultInvoiceAddressId and DefaultDeliveryAddressId和 Us
  • 实体框架中的导航属性是什么

    我是实体框架的新手 当Visual Studio创建模型图时我们主要可以看到Entities Propertie和Navigation Properties这两个东西 那么这些Navigation Properties是什么 如何使用它们
  • 处理注入的 HttpClient

    我们的 MVC 应用程序使用 HttpClient 调用 WebAPI 操作 我决定使用 StructureMap 注入 HttpClient 并覆盖控制器中的 dispose public HomeController HttpClien

随机推荐

  • 气流 sla_miss_callback 函数未触发

    我一直在尝试获取松弛消息回调以在 SLA 未命中时触发 我注意到 SLA 未命中已在 Airflow Web UI 中成功注册 网址为slamiss list on failure callback工作成功 但是 那sla miss cal
  • C语言中可以使用for循环来改变变量名吗?

    这是一个通用问题 因此我没有尝试解决的实际代码 但我想知道的是 我可以使用for循环更改C中变量的名称 例如 如果我有part1 part2 part3 part 作为我的变量名 有没有办法将它附加到我的循环计数器 以便它会随着每次通过而增
  • 如何让 CSS 字体与这个 Grails PDF 渲染插件一起使用?

    我正在使用 Grails 渲染插件来生成 PDF 我想在我的 PDF 中包含 CSS 以便更好地呈现它 我在上找到了一个例子渲染插件网站 http gpc github io grails rendering docs manual gui
  • 签名时发生错误:未知错误“-2147012894”

    我有 pfx 证书 购买自https www globalsign co uk https www globalsign co uk 我已使用它签署了我的 VSTO Visual Studio 中的 Excel 加载项项目类型 项目的 Cl
  • 在 onLoadFinished() 期间合并游标会在旋转后导致 StaleDataException

    我正在使用 loaderManager 从数据库加载一些结果 不幸的是 下面的代码会产生一个陈旧数据异常旋转设备后 Override public void onLoadFinished Loader
  • 从 Windows Phone 7 中的 Webbrowser 控件检索选定的文本

    当使用 Tap 选择它时 我尝试从 Windows Phone 7 中的 Webbrowser 控件检索选定的文本 还想在选择文本时删除复制图标 按住点击时 我想确认网络浏览器控件有任何选定的文本 我怎样才能在那里存支票 我还想突出显示网络
  • 使用 Fabric js 将背景图像调整为画布大小

    我正在尝试拉伸背景图像 使其适合画布大小 但它不起作用 我已经关注了这个问题 并根据评论我已经实现了拉伸代码 使用 Fabric js 将背景图像拉伸到画布大小 https stackoverflow com questions 29005
  • 使用 android 平台更新 parse.com 中每行的值

    我在更新名为 parse com 的云存储站点中的每行值时遇到问题 我只是使用 parse com 的新手 我已阅读有关它的文档并理解它 但我想做的与那里的例子有点不同 这是我的代码 public void onClick View arg
  • 数据驱动的状态机应用

    我们目前正在开发 数据驱动 状态机应用程序 现在 状态流都在数据库中配置 但在我们当前的设计中 没有任何决策 业务逻辑可以在数据库中配置 因此 代码也必须基本上 了解 状态流 因此在数据库中配置流确实没有意义 我心中有一个设计 允许我们使用
  • 如何在保留合并更改的同时删除合并提交?

    我有来自我的存储库的提交日志 您可以看到 合并分支 到 提交 在这些提交之后 分支被合并 我需要删除合并提交 但不放弃更改 默认变基不显示合并提交 如果您想应用提交的更改而不包括合并提交 正如 Roland Smith 指出的那样 这通常被
  • 访问SVHN数据集中hdf5组的两种方式有什么区别?

    我需要读取 SVHN 数据集并尝试读取第一张图像的文件名 我在理解 HDF5 的结构方面有点困难 尤其是在理解 SVHN 数据集的层次结构 结构方面 这两种读取图像名称的方法有什么区别 我在这个脚本的定义中遇到了方法1getName 功能
  • 如何检查Canvas中的两个图形(线)是否发生碰撞?

    所以我一直在开发一款跑步火柴人游戏 不幸的是 我遇到了这个问题 我似乎无法弄清楚 如果名为障碍物的绘图穿过我的火柴人 我希望出现警报并说 游戏结束 然而 如果我的火柴人踢 他变成红色 并且障碍物接触到图纸的右脚 那么它会说 你赢了 任何帮助
  • VT100 ANSI 转义序列:获取屏幕尺寸、条件 ANSI

    当我在终端上调整大小时 它保持全屏 我想 有某种方法可以找出终端的屏幕尺寸 我怎样才能在 VT100 中做到这一点 使用 时 当我列出文件夹时 它会以蓝色显示文件夹 或者说不同的颜色 但是 如果将输出保存到文本文件 ls gt out tx
  • 如何根据发送者的身份使新消息显示在左侧/右侧? (无浮动)

    我正在尝试制作一个网页 根据用户 1 左文本区域 或用户 2 右文本区域 是否发送消息 黄色对话窗口中的消息显示在左侧或右侧 与消息在手机上的显示方式相同如今 通过发送消息的背景颜色可以区分消息的发送者 用户1为浅蓝色 用户2为紫色 我试图
  • 如何在同一个类(C++、MFC)中调用工作线程?

    这是我的代码 其中包含错误 void ClassA init HANDLE hThread data thread thread is an object of struct data hThread CreateThread NULL 0
  • 如何控制TextView何时将String发送到新行?

    当一个词出现在String from a TextView太大 无法与前面的单词放在同一行 它会跳到下一行 事实证明这非常有用 然而 这让我陷入了两难的境地 我的String出于我的特殊原因 需要在单词的每个字母之间有一个空格 并且在单词之
  • 当 Inno Setup 中的注册表值仅使用默认名称时,如何获取该值?

    我正在尝试使用 Inno Setup 的 Pascal 脚本从 Windows 注册表 本例中为 Google Sketchup 获取应用程序的安装目录 以便我可以在那里安装插件 该注册表项没有名称 在 Regedit 中只有 默认 我试过
  • Codeigniter result_array() 返回一行

    在我的表中 我有两行 但是当我print r the data该模型函数连接到它只返回数据库中的第二行 为什么 型号功能 function getAllUsers query this gt db gt get users foreach
  • 通过 GUI 将日期输入数据库,以便 FMDatabase 读取

    我有一组事件 在发布应用程序之前必须将其输入数据库 以便应用程序准备好从此数据库中读取数据 我看过一些类似这样的帖子 解释了如何将 NSDate 输入数据库以便可以读回 iPhone SQLite日期问题 https stackoverfl
  • 如何使用 WebApi2、OData 和 $expand 指定结果的形状

    当我将 OData 与特定的对象一起使用时 执行 AutoMapper 映射时遇到问题 select or expand values 使用 WebApi 操作 public IQueryable