OData – 坑
前言
OData 有很多很多的坑,我的主张是能少用一样是一样,比如 Batch Processing 不要用,Inheritance 不要用,除了 GET 其它 PUT POST DELETE 都不要用,$apply 不要用,等等等。
这篇记入一些,我避开了绝大部分功能后依然掉的坑。
当 $apply 遇上 Ok
参考:Github – $apply is not showing meta data info when I use IActionResult
版本:ASP.NET Core 8.0.4,OData 8.2.5
我几年前就知道 $apply 这种复杂的功能一定有很多坑的,也早就停用了。
只是今天机缘巧合下去尝试了一遍,结果不出所料,掉坑...
下面是一个很简单的 Controller
[ApiController]
[Route("api")]
public class PersonController(
ApplicationDbContext db
) : ControllerBase
{
[ODataAttributeRouting]
[EnableQuery]
[HttpGet("people")]
[Produces(MediaTypeNames.Application.Json)]
[ProducesResponseType(StatusCodes.Status200OK)]
public ActionResult<IQueryable<Person>> GetPeople()
{
return Ok(db.People);
}
}
发现哪里有问题了吗?
public ActionResult<IQueryable<Person>> GetPeople()
{
return Ok(db.People);
}
发现了吗?
return Ok(db.People);
还没发现?!
是的,正常人是看不出来哪里有问题的,因为整个写法和官方网站的 Demo 一摸一样。
我们尝试 query 看看
哎哟,一切正常哦。
加入 $apply 再试试
http://localhost:5237/api/people?$apply=groupby((name),aggregate($count as count))&$count=true
效果
它直接返回 array,而不是一个 odata 对象,少了 @odata.context 和 @odata.count。
接着,我们修改一行代码
public ActionResult<IQueryable<Person>> GetPeople()
{
// return Ok(db.People);
return db.People;
}
去掉 Ok(),直接返回 IQueryable 就好。
见证奇迹的时刻...
一切正常。
神奇吗?惊讶吗?我就问你,这是不是坑?!
照着官网做,一些功能正常运作,一些功能有一半没一半...恐怖吗?
结论:珍惜生命,远离 OData...
OData – 坑的更多相关文章
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- 踩石行动:ViewPager无限轮播的坑
2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...
- 为C# as 类型转换及Assembly.LoadFrom埋坑!
背景: 不久前,我发布了一个调试工具:发布:.NET开发人员必备的可视化调试工具(你值的拥有) 效果是这样的: 之后,有小部分用户反映,工具用不了(没反应或有异常)~~~ 然后,建议小部分用户换个电脑 ...
- 首个threejs项目-前端填坑指南
第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
- ABP框架 - OData 集成
文档目录 本节内容: 简介 安装 安装Nuget包 设置模块依赖 配置你的实体 创建控制器 示例 获取实体列表 请求 响应 获取单个实体 请求 响应 获取单个实体及导航属性 请求 响应 查询 请求 响 ...
- 关于微软HttpClient使用,避免踩坑
最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...
随机推荐
- PowerBuilder现代编程方法X11:PB程序完全跨平台方案
PB可能要支持Windows.macOS.Linux.iOS.Android与鸿蒙操作系统和X86.ARM.RISC-V与国产龙芯CPU的原生应用了! PowerBuilder现代编程方法X11:PB ...
- 引入样式在Element UI (Vue 2)和Element Plus (Vue 3)中的不同
引入样式 Element UI (Vue 2): import 'element-ui/lib/theme-chalk/index.css'; Element Plus (Vue 3): im ...
- [oeasy]python0082_VT100_演化_颜色设置_VT选项_基础色_高亮色_索引色_RGB总结
更多颜色 回忆上次内容 上次 了解了控制序列 背后的故事 一切标准 都是 从无到有 的 就连 负责标准的组织 也是 从无到有 的 VT-05 奠定了 基础颜色 黑底 绿字 隔行 扫描 但 多颜色设置 ...
- 什么是spring.factories,引入未知模块报错如何解决
对于maven中引入其他外部包加入容器的过程,需要用到spring.factories spring.factories的作用:将自动配置类与对应的配置类集中在一起,方便springboot自动装配, ...
- 免费正版 IntelliJ IDEA license 详细指南
一.前言 IntelliJ IDEA 一直是我非常喜欢的 IDE 自从用上之后就回不了头了,但是 Ultimate 版本的费用十分昂贵,其实 JetBrains 自己就提供了6种免费申请授权的方式:本 ...
- 6、Git之团队协作机制
6.1.团队内协作 6.1.1.创建本地库 如上图所示,一个名叫刘备的人,在本地电脑中创建了一个项目,并使用 git 来维护. 6.1.2.推送本地库到代码托管中心 如上图所示,刘备想让别人也能看到自 ...
- 【Mybatis】10 实现分页 & 分页插件
回顾SQL分页查询 也就是说,在查询结果的最后控制返回的起始位置&记录数量 参数1:返回的开始位置 参数2:要返回的记录数 但是,如果说是只写了一个参数,直接表示参数2处理 LIMIT [s ...
- 【Java】Input,Output,Stream I/O流 03 系统标准流 & 打印流
Standard Input,Output Stream 标准输入输出流 - System.in 系统标准输入流 所属InputStream Scanner(System.in); 默认从键盘获取输入 ...
- 【转载】 推荐系统 EE 问题与 Bandit 算法
原文地址: https://toutiao.io/posts/584etm/preview ------------------------------------------------------ ...
- 【转载】 CV往哪卷?李飞飞指出三颗「北极星」:具身智能,视觉推理和场景理解
原文地址: https://news.cnblogs.com/n/720105/ 新智元报道 编辑:LRS ============================================== ...