.NET 6新特性试用 | 最小Web API

前言

如果你使用过其他一些轻量级Web框架,比如Node.JS,你就会知道,创建具有最小依赖项的HTTP API是多么简单:

var express = require('express')
var app = express()app.get('/', function (req, res) {res.send('hello My IO!')
})app.listen(3000)

而现在,使用.NET 6,我们也可以在ASP.NET Core中创建仅包括最少文件、功能和依赖项的最小Web API。

最小Web API

要实现上面相同的功能,只需要三行代码:

var app = WebApplication.Create(args);app.MapGet("/", () => "hello My IO!");app.Run();
  • 首先,创建一个WebApplication实例;

  • 然后,使用MapGet方法配置了一个最小Web API端点;

  • 最后,使用Run方法启动Web API应用程序。

e37209beb061e39066e83ac25a3c6f80.png

但是,要在生产环境下使用的API不可能这么简单,至少需要处理依赖项和中间件。

Demo

1.使用模板

打开Visual Studio 2022,创建新项目,选择“ASP.NET Core Web API”项目模板:

3be7c9b305fa31b9bf43ecc3477e329f.png

可以看到Use controllers选项默认选中的,取消该选项,则会创建最小Web API。

2.代码结构

相较于VS2019生成的项目结构,文件精简了,而且代码量也少很多:

5d8f48563531db989282be948174f39d.png

var builder = WebApplication.CreateBuilder(args);// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();var app = builder.Build();// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI();
}app.UseHttpsRedirection();var summaries = new[]
{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};app.MapGet("/weatherforecast", () =>
{var forecast = Enumerable.Range(1, 5).Select(index =>new WeatherForecast(DateTime.Now.AddDays(index),Random.Shared.Next(-20, 55),summaries[Random.Shared.Next(summaries.Length)])).ToArray();return forecast;
})
.WithName("GetWeatherForecast");app.Run();internal record WeatherForecast(DateTime Date, int TemperatureC, string? Summary)
{public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}

相较于以前我们使用两个单独的文件Program.cs和Startup.cs来配置应用程序托管和启动。现在,全部都在Program.cs中实现:

  • 在WebApplicationBuilder实例上使用Addxxx方法向DI容器注册特定服务,类似Startup类的ConfigureServices方法实现。

  • 在WebApplication实例上使用Usexxx方法将一系列中间件加入到HTTP管道,类似Startup类的Configure方法实现。

  • DTO使用record定义,而且也放在同一个Program.cs文件中。

3.功能演示

现在我们运行应用程序,Visual Studio 2022默认使用 Kestrel Web服务器,而不是IIS Express。

最小Web API默认已经集成了Swagger,我们可以直接在这里验证API是否工作正常:

078e4351e6f0ab26243030f78a8ca7e1.png

结论

作为要在生产环境下使用的API,随着项目需求和复杂性的增加,单个文件会变得非常臃肿。

因此,将不同功能代码分解到不同的层和文件中肯定是必然的结果。

目前来说,最小Web API仅用于快速创建演示项目,而对生产项目使用自定义模板,可能是较好的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之SparseArray<E>详解

最近编程时&#xff0c;发现一个针对HashMap<Integer, E>的一个提示&#xff1a; 翻译过来就是&#xff1a;用SparseArray<E>来代替会有更好性能。那我们就来看看源码中SparseArray到底做了哪些事情&#xff1a;一、构造从构造方法我们可以看出&#xff0c;它和一般…

WPF/MVVM 快速开发

http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial 这篇文章醍醐灌顶&#xff0c;入门良药啊&#xff01; Introduction Assuming that you have a decent understanding of C#, getting started in WPF isnt too difficult. I started looking at WP…

钢厂冒的白烟到底有没有污染?东北大学教授的试验结果让你大吃一惊

全世界只有3.14 % 的人关注了爆炸吧知识对于大多数人来讲钢厂的污染首先是来自于冒的气体钢铁企业污染严重的时候烟气有黄烟、黑烟、红烟、褐色烟等和这些烟相比一部分人认为钢厂冒的白烟是水蒸气没有污染另一部分则认为白烟也是污染避之而不及钢厂冒的白烟到底有没有污染呢&am…

IE6下margin-left双倍bug问题

熟悉 CSS 盒模型朋友相信对于 IE 双倍浮动边界 BUG 不会陌生&#xff0c;这个 BUG 只会产生在浮动行的第一个浮动元素&#xff08;此处说法不准确&#xff0c;并不是第一个浮动元素&#xff0c;假如浮动的元素在一行显示不下&#xff0c;占用了多行&#xff0c;那么每一行的第一…

基于事件驱动架构构建微服务第11部分:持续集成

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part12-continuous-integration/在本教程中&#xff0c;我将展示如何设置docker持续集成以在docker容器内构建和运行单元测试。因为我将使用kubernetes在容器中运行微服务…

使用Visual Studio 创建可视Web Part部件

使用Visual Studio 创建可视Web Part部件 可视Web Part部件是很强大的Web 部件。它提供内置设计器创建你的用户界面。本文主要解说怎样使用Visual Studio 创建可视Web Part部件.准备&#xff0c;创建一个自己定义列表Stats&#xff0c;加入某些栏目&#xff0c;填充部分数据。当…

如果在我爸的朋友圈当杠精,会挨揍吗?

1 这位爷爷推这么大力是想换老伴了吧&#xff1f;▼2 撞玻璃门撞出心理阴影的狗子▼3 她和她爸交朋友的方式就是以爸的口吻评论她爸的朋友圈▼4 你们还记得那个学鸭子嘟嘴的小可爱吗&#xff1f;▼5 看看狗子委屈的......▼6 去游个泳&#xff0c;结果收获了一群小鸭子▼…

Git的理解和使用

Git介绍 Git&#xff08;the stupid content tracker&#xff09;是一个源自Linux内核项目的源码管理工具。和传统的CVS、SVN不同&#xff0c;git是一个分布式源码管理工具。 Git命令简单说明git init初始化一个本地的代码仓库。git clone从远程复制一个代码仓库。git configgi…

【v3.6.2】iNeuOS工业互联网操作系统,发布实时存储方式:实时存储、变化存储、定时存储,设备振动状态和电能状态监测驱动...

目 录1. 概述... 12. 平台演示... 23. 存储方式... 24. 设备状态和用电状态监控驱动... 31. 概述本次升级主要增加了对设备实时数据的存储方式、设备振动状态驱动和用电状态监控的驱动&#xff0c;并且优化了部分核心代码。2. 平台演示在线演示&…

查询子串_SQL视图、子查询和常见函数的应用

一、视图含义&#xff1a;虚拟表&#xff0c;和普通表一样使用&#xff0c;通过表动态生成的数据。创建语法的关键字是否实际占用物理空间使用视图CREATE VIEW没有&#xff08;只保存了SQL逻辑&#xff09;增删改查&#xff0c;一般不能增删改表CREATE TABLE占用&#xff08;保…

The application could not be verified

2019独角兽企业重金招聘Python工程师标准>>> //调试的时候出现 The application could not be verified删除已安装的app&#xff0c;再Run 转载于:https://my.oschina.net/liuchuanfeng/blog/550025

git之you can‘t overwrite the remote branch问题解决

今天使用smartGit提交代码的时候出现这个错误&#xff0c;如图&#xff0c; remote是远程的意思&#xff0c;branch是分支的意思&#xff0c;you cant overwrite the remote branch英文的意思是我的remote branch被移动位置了&#xff0c;应该选中edit下面的prefrences下面的al…

数据分析和数据挖掘的理论研究必要性

2019独角兽企业重金招聘Python工程师标准>>> 数据分析&#xff0c;并不抽象&#xff0c;传统的数据分析&#xff0c;包括很多。例如信号处理中的DCT&#xff0c;滤波&#xff0c;IDCT变换。由于确定了滤波窗口的特性&#xff0c;使得对一个时间轴上的数据进行了频谱…

这个国家太奇怪了!全球最落后的国家之一,却又是世界上最幸福的国家!

全世界只有3.14 % 的人关注了爆炸吧知识中国和印度之间喜马拉雅山脉附近存在着一个弹丸小国国家人口仅有75万左右国土面积不足4万平方公里这里没有军队只有人们彼此诚挚的信任这里是最快乐的国度也是世间最神秘纯净的世外桃源这里是徒步天堂没有车水马龙的街道和红绿灯没有高楼…

嵌套饼图_旭日图的效率,高到饼图都羡慕

在展示占比情况时&#xff0c;饼图是我们最常用的选择。但是&#xff0c;饼图只能展示单层数据的占比情况&#xff0c;在面对多层级数据时&#xff0c;我们真的要用10个饼图进行可视化吗&#xff1f;不用挠头苦思&#xff0c;今天我们就来看看多个饼图的组合升级版——旭日图是…

Android之BaseAdapter—convertView回收机制与动态控件响应

前言&#xff1a;对于listView的BaseAdapter的派生&#xff0c;难度比较大。最难理解的莫过于getView(int position, View convertView, ViewGroup parent)这个函数是如何产生每条记录的&#xff0c;有些博客中利用holderView&#xff0c;有些博客却没有用&#xff0c;种种方法…

刚刚还在做菜,瞬间人就没了!厨房里一定不要再做这些事

全世界只有3.14 % 的人关注了爆炸吧知识厨房是一个家最有生活气息的地方&#xff0c;即使在外面&#xff0c;只要闻到别人家厨房飘出的饭菜香味&#xff0c;就很让人想家。但是&#xff0c;如果不注意细节&#xff0c;厨房也容易酿成悲剧&#xff01;今天&#xff0c;给大家看几…

poj 3125 Printer Queue(STL注意事项)

http://poj.org/problem?id3125 这道题没什么突出的地方&#xff0c;是一道很水的题&#xff0c;可以用list&#xff0c;也可以用queue来解决。&#xff08;用list解决的代码我就不写了&#xff09;把它写上来&#xff0c;只是因为我在使用STL的时候犯了一个小错误&#xff0c…

TCTDB存储结构

TCTDB是tokyo cabinet家族中的表格数据库&#xff08;如上图&#xff09;&#xff0c;其实现基于TCHDB&#xff08;hash database&#xff09;和TCBDB(B-tree database)。TCHDB参考&#xff1a;http://blog.chinaunix.net/space.php?uid20196318&doblog&id327754 TCBD…

Android之px 与 dp, sp换算公式

px: pixels(像素). 不同设备显示效果相同&#xff0c;一般我们HVGA代表320x480像素&#xff0c;这个用的比较多。 pt: point&#xff0c;是一个标准的长度单位&#xff0c;1pt&#xff1d;1/72英寸&#xff0c;用于印刷业&#xff0c;非常简单易用&#xff1b; sp: scaled pi…