尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性
本文首发于《尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性》
概述
.NET开发者们大家好,我是Rector。
几天前(美国时间2021年8月10日),微软官方发布了.NET 6的第7个预览版,其中包含了很多新的特性和功能,比如:
- 优化最小Web API(minimal APIS)模板
- 为生成常用HTTP响应添加了IResult的接口实现
- 最小操作支持Request,Response等
- 优化了最小主机、模板
- 从查询字符串中获取Blazor组件参数
- ...
本文我们主要来体验最小Web API的功能和特性。最小Web API的目的主要是帮助C#(或者F#)后端开发者快速创建微服务项目或者HTTP API服务。
与之前的ASP.NET Core Web API相比,最小Web API在启动模板和框架结构上都有些不同。最小Web API的模板相当简洁,你几需要写4行代码便可完成一个最小Web API项目的搭建。
下面我们从头开始创建一个最小Web API项目并体验。
准备工作
在开始创建最小Web API之前,请确保开发环境中已安装了.NET SDK 6.0.100-preview.7.21379.14(当前最新的.NET SDK版本),在Windows操作系统中,你可以使用.NET Cli命令来查看,比如:
dotnet --info
运行结果如下图:
如果需要查看当前环境已安装的.NET模板,运行如下命令:
dotnet new -l
运行结果如下:
Template Name Short Name Language Tags
-------------------------------------------- ------------------- ---------- --------------------------
ASP.NET Core Empty web [C#],F# Web/Empty
ASP.NET Core gRPC Service grpc [C#] Web/gRPC
ASP.NET Core Web API webapi [C#],F# Web/WebAPI
ASP.NET Core Web App razor,webapp [C#] Web/MVC/Razor Pages
ASP.NET Core Web App (Model-View-Controller) mvc [C#],F# Web/MVC
ASP.NET Core with Angular angular [C#] Web/MVC/SPA
ASP.NET Core with React.js react [C#] Web/MVC/SPA
ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA
Blazor Server App blazorserver [C#] Web/Blazor
Blazor WebAssembly App blazorwasm [C#] Web/Blazor/WebAssembly/PWA
Class Library classlib [C#],F#,VB Common/Library
Console Application console [C#],F#,VB Common/Console
dotnet gitignore file gitignore Config
Dotnet local tool manifest file tool-manifest Config
global.json file globaljson Config
MSTest Test Project mstest [C#],F#,VB Test/MSTest
MVC ViewImports viewimports [C#] Web/ASP.NET
MVC ViewStart viewstart [C#] Web/ASP.NET
NuGet Config nugetconfig Config
NUnit 3 Test Item nunit-test [C#],F#,VB Test/NUnit
NUnit 3 Test Project nunit [C#],F#,VB Test/NUnit
Protocol Buffer File proto Web/gRPC
Razor Class Library razorclasslib [C#] Web/Razor/Library
Razor Component razorcomponent [C#] Web/ASP.NET
Razor Page page [C#] Web/ASP.NET
Solution File sln Solution
Web Config webconfig Config
Windows Forms App winforms [C#],VB Common/WinForms
Windows Forms Class Library winformslib [C#],VB Common/WinForms
Windows Forms Control Library winformscontrollib [C#],VB Common/WinForms
Worker Service worker [C#],F# Common/Worker/Web
WPF Application wpf [C#],VB Common/WPF
WPF Class library wpflib [C#],VB Common/WPF
WPF Custom Control Library wpfcustomcontrollib [C#],VB Common/WPF
WPF User Control Library wpfusercontrollib [C#],VB Common/WPF
xUnit Test Project xunit [C#],F#,VB Test/xUnit
创建最小API程序项目
在.NET Core中创建程序的方式有多种,可以使用命令行工具执行dotnet new <模板名称> <项目名称>
创建,也可以使用IDE(如:Visual Studio, Rider, VS Code)来创建。
使用命令行工具创建最小API项目
在本地磁盘创建一个存储项目的目录,假如路径为D:\Project\tmp\MinimalApi
,打开命令行工具并进入此目录,在当前目录下执行如下命令:
dotnet new web MinApi
执行结果如下图
生成的项目文件夹和文件如下图
至此,以命令行方式创建最小API项目即完成。
使用Visual Studio创建最小API项目
使用Visual Studio创建最小API项目,请确保已安装Visual Studio 2022 17.0.0 Preview 3.0(当前最新版本)。
依次打开Visual Studio 2022的【Start Window】->【Create a new project】窗口,在右侧的已安装模板列表中选择【ASP.NET Core Empty】项目模板,之后点击[Next]按钮,如图:
在弹出的【Configure your new project】中,完善Project name(项目名称),Location(位置),Solution name(解决方案名称)等信息,然后点击[Next]按钮,如图:
在弹出的【Additional Information】窗口中,Framework的版本选择[.NET 6.0(Preview)],然后点击[Next]按钮,以完成最小API项目的创建,如图:
最小API解析
在IDE中打开刚才创建的MinimalApi,并在代码编辑器中打开Program.cs
文件,如下:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.MapGet("/", () => "Hello World!");
app.Run();
可以看到,最小API项目的代码非常简洁,如果去掉其中的异常处理代码,就还剩4行代码了,如下:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
为了不启用https,我们修改一下位于Properties
目录中的launchSettings.json
配置文件,修改后如下:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:2200",
"sslPort": 0
}
},
"profiles": {
"MinimalApi": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:2200",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
然后启用项目,看是否能正常运行起来。在Visual Studio 2022中,按F5运行,如果在浏览中打开并显示如下页面,说明最小API项目运行正常,如图:
在最小API项目中,直接调用WebApplication.MapGet()
方法即可完成路由的注册和映射,如新增一个error
的路由:
app.MapGet("/error", () => Results.Problem("错误",statusCode:500));
运行结果如图:
WebApplication
实例提供了很多路由映射的方法,比如HTTP请求协议:MapGet()
,MapPost()
,MapDelete()
,MapPut()
等等。
与以往的ASP.NET Core应用程序相同,在最小API项目中,你仍然可以使用像Swagger这样的接口文档组件。
首先,在Nuget包管理工具中搜索Swashbuckle
,然后安装Swashbuckle.AspNetCore
组件,如图:
然后注册Swagger的服务和路由,完整的示例如下:
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
/// <summary>
/// 添加Swagger
/// </summary>
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Api", Version = "v1" });
});
/// <summary>
/// 注册API发现功能
/// </summary>
builder.Services.AddEndpointsApiExplorer();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.MapGet("/", () => "Hello World!");
/// <summary>
/// 抛出异常测试
/// </summary>
app.MapGet("/throw", () => { throw new Exception("Exception occured"); });
/// <summary>
/// 错误页面示例
/// </summary>
app.MapGet("/error", () => Results.Problem("错误",statusCode:500));
/// <summary>
/// 注册Swagger的路由
/// </summary>
app.UseSwagger();
/// <summary>
/// 注册Swagger UI的路由
/// </summary>
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Api v1"));
app.Run();
运行后的Swagger界面如图:
在最小API应用程序中,我们同样也可以返回实体对象,比如:注册一个/customer
的路由,然后返回一个Customer
的实例模型,如下:
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
/// <summary>
/// 添加Swagger
/// </summary>
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Api", Version = "v1" });
});
/// <summary>
/// 注册API发现功能
/// </summary>
builder.Services.AddEndpointsApiExplorer();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.MapGet("/", () => "Hello World!");
/// <summary>
/// 抛出异常测试
/// </summary>
app.MapGet("/throw", () => { throw new Exception("Exception occured"); });
/// <summary>
/// 错误页面示例
/// </summary>
app.MapGet("/error", () => Results.Problem("错误",statusCode:500));
/// <summary>
/// 返回客户实体模型
/// </summary>
app.MapGet("/customer", () => new Customer("Rector", "Liu"));
/// <summary>
/// 注册Swagger的路由
/// </summary>
app.UseSwagger();
/// <summary>
/// 注册Swagger UI的路由
/// </summary>
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Api v1"));
app.Run();
/// <summary>
/// 客户实体
/// </summary>
/// <param name="FirstName"></param>
/// <param name="LastName"></param>
public record Customer(string FirstName, string LastName);
运行结果如图:
好了,本文对最小Web API的体验到此。码友网将在后续的文章中为大家分享的关于最小Web API的其他功能和特性,敬请关注。
尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性的更多相关文章
- ASP.NET Web API 2.0新特性:Attribute Routing1
ASP.NET Web API 2.0新特性:Attribute Routing[上篇] 对于一个针对ASP.NET Web API的调用请求来说,请求的URL和对应的HTTP方法的组合最终决定了目标 ...
- 微软.NET CORE 3.0 预览版 7 发布:大幅减少 SDK 空间大小
据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话), ...
- 关于在Visual Studio 2019预览版中的用户体验和界面的变化
原文地址:https://blogs.msdn.microsoft.com/visualstudio/2018/11/12/a-preview-of-ux-and-ui-changes-in-visu ...
- .NET 6 预览版 5 发布
很高兴.NET 6 预览版5终于跟大家见面了.我们现在正处于.NET 6 的后半部分,开始整合一些重要的功能. 例如.NET SDK 工作负载,它是我们.NET 统一愿景的基础,可以支持更多类型的应用 ...
- Windows 10 开发人员预览版中的新增功能(转自 IT之家)
Windows 10 开发人员预览版中的新增功能 在Win10预览版中安装工具与SDK后,即可着手创建Windows通用应用或先浏览目前的环境与此前相比都发生了什么变化. 应用建模 文件资源管理器: ...
- .NET 5.0预览版6发布:支持Windows ARM64设备
2020年6月25日,微软dotnet团队在博客宣布了第六个 .NET 5.0 的预览版:https://devblogs.microsoft.com/dotnet/announcing-net-5- ...
- VS Code Java 3月更新|代码补全、Maven 以及 Java 插件预览版本新升级!
Nick Zhu Senior Program Manager, Developer Division at Microsoft 大家好,欢迎来到 Visual Studio Code Java 的 ...
- VS2015预览版中的C#6.0 新功能(二)
VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(三) 自动属性的增强 只读自动属性 以前自动属性必须同时提供setter和getter方法,因而只读属性只能通 ...
- VS2015预览版中的C#6.0 新功能(三)
VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(二) Using static 使用using StaticClass,你可以访问StaticClass类里的 ...
随机推荐
- 使用Linux Deploy将闲置的安卓手机改造简易服务器
本文将介绍我在自己闲置的小米4手机安装CentOS系统的过程.手机配置信息:MIUI 9开发板(方便ROOT).Android 6.架构 ARMv7(arm32) 准备工作 1.手机必须ROOT!!! ...
- Reactive Spring实战 -- 响应式MySql交互
本文与大家探讨Spring中如何实现MySql响应式交互. Spring Data R2DBC项目是Spring提供的数据库响应式编程框架. R2DBC是Reactive Relational Dat ...
- 免费版:Xshell和Xftp下载路径
家庭版Xshell和Xftp下载地址: 下载地址:https://www.netsarang.com/zh/free-for-home-school/
- Nginx:Nginx动静分离
1.什么是动静分离 将动态请求和静态请求区分访问 2.为什么要做动静分离 tomcat本身处理静态效率不高,还会带来资源开销.所以使用动静分离,将静态由Nginx处理, 动态由PHP处理或Tomcat ...
- SpringBoot中如何监听两个不同源的RabbitMQ消息队列
spring-boot如何配置监听两个不同的RabbitMQ 由于前段时间在公司开发过程中碰到了一个问题,需要同时监听两个不同的rabbitMq,但是之前没有同时监听两个RabbitMq的情况,因此在 ...
- 基于Vue/React项目的移动端适配方案
本文的目标是通过下文介绍的适配方案,使用vue或react开发移动端及H5的时候,不需要再关心移动设备的大小,只需要按照固定设计稿的px值布局,提升开发效率. 下文给出了本人分别使用create-re ...
- 每日英语——the rest of my life
<the rest of My life> 词面意思:我的余生 实际意思:我的余生 1. 歌曲:<The Rest of My life> Less Than Jake 歌词 ...
- OSSBrowser windows使用
目录 1. 安装 2. 启动OSSBrowser并登录 1. 安装 下载地址:github或官方 2. 启动OSSBrowser并登录 ossbrowser安装包下载到本地解压之后,点击oss-bro ...
- PYTHON matplotlib入门
'''作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值. 可以使用以下格式化字符. 字符 描述 '-' 实线样式 '--' 短横线样式 '-.' 点划线样式 ':' 虚线样式 ...
- MVC框架介绍分析
相信绝大多数学习过Javaweb的人都知道一个系统的模式--Spring模式,以这么模式中为基础,衍生出各种各样的新的模式,其中最重要的就是Spring下的Spring MVC MVC是Xerox P ...