武装你的WEBAPI-OData使用Endpoint

WEBAPI,Endpoint,OData,使用 · 浏览次数 : 66

小编点评

## OData 新版本支持新的终结点模式路由 本文介绍了 OData 7.4 新版本支持的新终结点模式路由。 **旧模式:endpoint 模式** 在 OData 7.4 版本之前,需要使用 **endpoint 模式**才能映射 API 路由到 OData 端点。但是,endpoint 模式现在默认使用 **endpoint 模式路由**,无需手动配置。 **新模式:endpoint 模式路由** 新模式允许您使用 `MapODataServiceRoute` 方法在 `endpoints` 中添加 OData 路由。这种方法接收两个参数:`routeBuilder` 和 `routeOptions`。`routeBuilder` 是一个路由构建器,用于创建 OData 路由的配置。`routeOptions` 是一个可选的选项对象,用于设置路由参数等。 **示例** ```csharp app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.Select().Filter().OrderBy().Count().MaxTop(10); endpoints.MapODataRoute("odata", "odata", GetEdmModel); }); ``` **与旧模式相比,新模式的优点是:** * 简化 API 配置 * 提高性能 * 减少 API 版本兼容性问题 **注意** * 新模式仅适用于 OData 7.4 版本。 * 您需要安装 `Microsoft.AspNetCore.OData` 包才能使用新模式。

正文

本文属于 OData 系列文章

Introduction

更新:
由于新版的 OData 已经默认使用了 endpoint 模式(Microsoft.AspNetCore.OData 8.0.0),不再需要额外配置,本文已经过时(asp.net core 3.1)。

最近看 OData 的 devblog,发现他们终于支持了新版的终结点(endpoint )模式路由了,于是我就迫不及待地试了试。

MVC 模式

现在的 OData 配置还是需要禁用 EnableEndpointRouting,感觉和现在标准 ASP. NET CORE 套路格格不入。

public void ConfigureServices(IServiceCollection services)
{
	services.AddControllers(mvcOptions => 
		mvcOptions.EnableEndpointRouting = false);

	services.AddOData();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	if (env.IsDevelopment())
	{
		app.UseDeveloperExceptionPage();
	}

	app.UseHttpsRedirection();
	app.UseRouting();
	app.UseAuthorization();

	app.UseMvc(routeBuilder =>
	{
		routeBuilder.Select().Filter();
		routeBuilder.MapODataServiceRoute("odata", "odata", GetEdmModel());
	});

	//app.UseEndpoints(endpoints =>
	//{
	//    endpoints.MapControllers();
	//});
}

IEdmModel GetEdmModel()
{
	var odataBuilder = new ODataConventionModelBuilder();
	odataBuilder.EntitySet<Student>("Students");

	return odataBuilder.GetEdmModel();
}

总之就是对强迫症非常不友好。

Endpoint 模式

终于,从 7.4 开始支持默认的 ASP. NET CORE Endpoint 模式了,你需要安装 7.4 的 odata 包:

Install-Package Microsoft.AspNetCore.OData -Version 7.4.0-beta

配置代码如下:

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddOData();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.Select().Filter().OrderBy().Count().MaxTop(10);
                endpoints.MapODataRoute("odata", "odata", GetEdmModel());
            });
        }

        private IEdmModel GetEdmModel()
        {
            var odataBuilder = new ODataConventionModelBuilder();
            odataBuilder.EntitySet<WeatherForecast>("WeatherForecast");

            return odataBuilder.GetEdmModel();
        }
    }

后面就不用在 MVC 模式与 Endpoint 模式之间反复横跳了,治愈了我的强迫症。

与武装你的WEBAPI-OData使用Endpoint相似的内容:

武装你的WEBAPI-OData使用Endpoint

本文属于 OData 系列文章 Introduction 更新: 由于新版的 OData 已经默认使用了 endpoint 模式(Microsoft.AspNetCore.OData 8.0.0),不再需要额外配置,本文已经过时(asp.net core 3.1)。 最近看 OData 的 devb

武装你的WEBAPI-OData与DTO

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

武装你的WEBAPI-OData聚合查询

本文属于OData系列 Introduction ODATA v4提出了新的聚合查询功能,这对于ODATA的基本查询能力($expand等)是一个非常大的补充。ODATA支持的聚合查询功能,可以对数据进行统计分析,例如求和、平均值、最大/最小值、分组等。 聚合查询是通过$apply关键字实现的。使用

武装你的WEBAPI-OData之API版本管理

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

颜值经济下,车企的必备武器

摘要:对于买车的你,除了性价比,“颜价比”占多少呢? 新消费需求的冲击 时代赋予新时代年轻人丰富多彩的物质世界,他们受到互联网、即时通讯、智能手机等科技产物的影响很大,这个群体在消费方面既感性又理性,正在逐渐成为消费的主力军。 根据《2020年中国消费者调查报告》,二线及以下城市“年轻购物达人”仅占

DTT第7期直播回顾 | 低代码应用构建流程和适用场景,与你想的一样吗?

摘要:本期直播主题是《揭秘华为云低代码技术微认证》,向开发者们讲述低代码的发展历程,介绍华为低代码平台应用魔方AppCube的开发能力,解读华为低代码的认证和学习体系 本期直播详解 本期直播主题是《揭秘华为云低代码技术微认证》,华为云PaaS服务产品部资深专家董鑫武向开发者们讲述低代码的发展历程,介

[转帖]调优"四剑客"的实战演练,福尔摩斯•K带你轻松优化性能

前言 天下武功,唯快不破。在侦探的世界中,破案效率永远是衡量一名侦探能力的不二法门。作为推理界冉冉升起的新星,大侦探福尔摩斯·K凭借着冷静的头脑、严谨的思维,为我们展现了一场场华丽而热血的推理盛宴。 接下来,我们不仅仅是看客,还将追随福尔摩斯·K的脚步,体验一场身临其境的冒险。一起寻访产生数据库性能

前端远程办公系列 —— 整体介绍

整体介绍 前言 有些公司需要你有远程办公的经验 远程办公是某些公司和组织的一种工作方式。比如公司运作以天津为根据地,还有一些团队在武汉,忙不过来时还有外包 本系列就以前端工程师的视角,以一个真实的场景来说一下这个事情。会说遇到了什么问题、如何协作、用到什么新工具,什么技术... 背景 张三,一直从事

超快的 Python 包管理工具「GitHub 热点速览」

天下武功,无坚不破,唯快不破! 要想赢得程序员的欢心,工具的速度至关重要。仅需这一优势,即可使其在众多竞争对手中脱颖而出,迅速赢得开发者的偏爱。以这款号称下一代极速 Python 包管理工具——uv 为例,它的核心竞争力在于「快」和「丝滑替代」。自年初开源以来,不到半年便实现了 Star 数破万的壮

比赛获奖的武林秘籍:07 一文速通电子设计大赛,电子人必看的获奖秘籍

本文主要介绍了全国大学生电子设计大赛的含义、比赛形式、组队技巧,结合自身经历讲解了备赛指南,同时对往年题目进行了分析和总结。