OData WebAPI实践-Non-EDM模式

这篇具有很好参考价值的文章主要介绍了OData WebAPI实践-Non-EDM模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文属于OData系列文章

前文说到了 EDMOData 之间的关系,具有 EDMOData 提供了强大的查询能力,但是 OData 并不必须要配置 EDM,我们也可以使用 Non-EDM 方案。

Non-EDM

所谓 Non-EDM ,并不是说在 OData 运行时不需要 EDM 配置了,而是由 OData 动态生成的 EDM,进而实现 OData 功能。

配置

配置 OData 就可以不需要在内配置 GetEdmModel()。当然,如果你需要配置路由,因为函数参数需要,我们可以返回一个默认的空 EDM。

            services.AddControllers()
                .AddOData(opt => opt.Count().Filter().Expand().Select().OrderBy().SetMaxTop(5)
                );

控制器

为了实现 OData 的功能,我们依然需要给控制器与函数上增加一些配置:

	[ApiController]
    [Route("api/[controller]")]
    public class AccountsController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get(ODataQueryOptions<Account> queryOptions)
        {
            var querable = accounts.AsQueryable<Account>();
            var finalQuery = queryOptions.ApplyTo(querable);
            return Ok(finalQuery);
        }

        [HttpGet("{id}")]
        public IActionResult Get(Guid id, ODataQueryOptions<Account> queryOptions)
        {
            var accountQuery = accounts.Where(c => c.AccountId == id);
            if (!accountQuery.Any())
            {
                return NotFound();
            }

            var finalQuery = queryOptions.ApplyTo(accountQuery.AsQueryable<Account>()) as IQueryable<dynamic>;
            var result = finalQuery.FirstOrDefault();

            if (result == null)
            {
                return NotFound();
            }

            return Ok(result);
        }
    }

这里代码使用了 ODataQueryOptions,因此没有使用 [EnableQuery]

我们查看 OData 路由,Account 不在路径中了。
OData WebAPI实践-Non-EDM模式

但是我们还是可以使用 OData 语法来进行查询:

OData WebAPI实践-Non-EDM模式

细心的同学发现:

  • 我使用了 $count,但是返回的内容并没有计数结果。
  • 返回对象中没有 @odata.context 指示对应实体的 EDM 配置信息。
  • 在定义了 OData EDM 的对象中,返回数组类型是 "Value":[] 的形式,而没有定义 EDM 的对象会直接返回数组对象,这个在与前端进行交互的过程中需要特别注意。

限制

不使用 EDM 模式,在使用 OData 查询时还是有很多限制:

  • 类似$count 之类的语句暂时还不支持。
  • 不支持复杂对象(ComplexType)的 $select。
  • 无法配置 EntityType 的 Ignore ,不支持一些 OData 的高级特性。
  • 不能实现 OData Routing 映射,可能会造成 Versioning 之类的操作困难。

因此,还是建议在使用 OData 时使用并正确配置 EDM,这样可以获得最全面的 OData 特性支持。文章来源地址https://www.toymoban.com/news/detail-440880.html

到了这里,关于OData WebAPI实践-Non-EDM模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 武装你的WEBAPI-OData与DTO

    本文属于OData系列文章 前面写了很多有关OData使用的文章,很多读者会有疑问,直接将实体对象暴露给最终用户会不会有风险?$expand在默认配置的情况下,数据会不会有泄露风险? 答案是肯定的,由于OData的特性,提供给我们便捷同时也会带来一些风险。很多地方推荐使用

    2024年02月03日
    浏览(31)
  • 武装你的WEBAPI-OData之API版本管理

    本文属于OData系列 对外提供WEBAPI时,如果遇上了版本升级,那么控制WEBAPI的版本也是非常必要的。OData官方提供了版本控制以及管理的解决方案,我个人是实践体会是 不好用 ,好在社区提供了对应的nuget包,与.NET主版本同步更新。 ASP.NET API Versioning是一个提供ASP.NET WEBAPI版本

    2024年02月03日
    浏览(23)
  • .Net Core6.0 WebAPI项目框架搭建六:仓储模式+导入SqlSuagr

     完整框架项目源码地址:https://download.csdn.net/download/yigu4011/87788956?spm=1001.2014.3001.5503 仓储(Respository)是对数据库访问的一个封装 解决方案新建Respository文件夹,新建类库Web.Core.IRepository,Web.Core.Repository 解决方案新建Services文件夹,新建类库Web.Core.IServices,Web.Core.Services 在类库

    2024年01月18日
    浏览(47)
  • [toolschain] 怎么运用git 嵌套git 管理(子文件夹中也有个git) 并且如何简单设置使用repo的笔记 本文是求助GPT的记录 实践有用

    Q:一个文件夹a,a中的文件被a中的git 1管理,同时与a平级有一个git2,怎么让git 也能管理到git1 的内容 A:如果你想让一个 Git 仓库(git2)也能管理另一个 Git 仓库(git1)的内容,你可以使用 Git 的子模块(submodule)功能。子模块允许一个 Git 仓库包含另一个 Git 仓库,使得你可

    2024年02月04日
    浏览(45)
  • 【服务器】Dell PowerEdge R750 加装硬盘和内存 | 设置硬盘为直通模式 Non-RAID Disk

    硬盘教程: https://www.bilibili.com/video/BV1aT411j71G/?vd_source=0fcfb2f2f346ba4bccf7f3ee3eb4ae69 注意,加装硬盘后: 需要在开机过程中,F11进入BIOS,找到新安装的硬盘,将硬盘模式设置为直通(教程在下面); 而后进入OS,进行mount,才可以完成扩容 BIOS设置中,回车代表确认,ESC代表返回

    2024年04月14日
    浏览(47)
  • 从零到一搭建netcore6.0 webapi+swagger+jwt认证+aop日志+mysql codefirst模式

    本文介绍从零到一搭建基于netcore6.0版本的 webapi接口应用 包括swagger接口管理文档 jwt接口安全认证 aop接口调用轨迹日志 ef映射mysql 使用codefirst模式交互数据库 首先新建一个webapi应用 此次默认配置HTTPS默认是勾选的 此处没用到暂时不进行勾选 可以删除这2个默认的文件 首先我

    2024年02月04日
    浏览(36)
  • EDM群发的优势

    在当今这个数字化的时代,电子邮件营销(EDM)已经成为企业与客户沟通的重要手段。相较于传统的营销方式,EDM群发具有许多独特的优势,使其在商业竞争中占据了不可替代的地位。 首先,EDM群发具有精准的目标定位能力。通过收集用户的邮箱地址并进行分类,企业可以针

    2024年01月16日
    浏览(26)
  • hana odata batch

    sap 博客有写 odata batch 处理前,先看一张图   In this blog post,we are going to see how to send a Odata Batch Request to the SAP Cloud for Customer system using POSTMAN Tool. Answers to expect from this post? How to use batch request in the POSTMAN Tool What all are the Pre-requisites needs to be done before making a batch call. What is the for

    2024年02月02日
    浏览(21)
  • 164. 通过 sap.ui.model.odata.v2.ODataModel 的 read 方法,读取 OData 数据的编程方式讲解

    本教程前面两篇文章,我们已经介绍了如何通过原生 JavaScript 代码和 sap.ui.model.odata.v2.ODataModel 两种方式,来消费 OData 服务的元数据。 SAP UI5 应用开发教程之一百四十 - 如何使用 JavaScript 代码连接部署在 SAP ABAP 服务器上的 OData 服务 SAP UI5 应用开发教程之一百四十六 - 通过 S

    2024年02月07日
    浏览(28)
  • EDM主题写作技巧:如何撰写吸引人的邮件主题?

    企业在进行邮件群发的时候,写好邮件主题是影响邮件打开率的一个非常重要的因素。这关系到我们是否能够将收件人开发成客户,或者和他为维持良好的关系。所以,怎么才能写好一封EDM的主题呢? 1、主题要素 邮件主题要包含两点因素“产品名+价值点”。“产品名”是让

    2024年02月02日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包