本文首发于 码友网--《创立API服务最小只有4行代码!!!尝新体验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/EmptyASP.NET Core gRPC Service grpc [C#] Web/gRPCASP.NET Core Web API webapi [C#],F# Web/WebAPIASP.NET Core Web App razor,webapp [C#] Web/MVC/Razor PagesASP.NET Core Web App (Model-View-Controller) mvc [C#],F# Web/MVCASP.NET Core with Angular angular [C#] Web/MVC/SPAASP.NET Core with React.js react [C#] Web/MVC/SPAASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPABlazor Server App blazorserver [C#] Web/BlazorBlazor WebAssembly App blazorwasm [C#] Web/Blazor/WebAssembly/PWAClass Library classlib [C#],F#,VB Common/LibraryConsole Application console [C#],F#,VB Common/Consoledotnet gitignore file gitignore ConfigDotnet local tool manifest file tool-manifest Configglobal.json file globaljson ConfigMSTest Test Project mstest [C#],F#,VB Test/MSTestMVC ViewImports viewimports [C#] Web/ASP.NETMVC ViewStart viewstart [C#] Web/ASP.NETNuGet Config nugetconfig ConfigNUnit 3 Test Item nunit-test [C#],F#,VB Test/NUnitNUnit 3 Test Project nunit [C#],F#,VB Test/NUnitProtocol Buffer File proto Web/gRPCRazor Class Library razorclasslib [C#] Web/Razor/LibraryRazor Component razorcomponent [C#] Web/ASP.NETRazor Page page [C#] Web/ASP.NETSolution File sln SolutionWeb Config webconfig ConfigWindows Forms App winforms [C#],VB Common/WinFormsWindows Forms Class Library winformslib [C#],VB Common/WinFormsWindows Forms Control Library winformscontrollib [C#],VB Common/WinFormsWorker Service worker [C#],F# Common/Worker/WebWPF Application wpf [C#],VB Common/WPFWPF Class library wpflib [C#],VB Common/WPFWPF Custom Control Library wpfcustomcontrollib [C#],VB Common/WPFWPF User Control Library wpfusercontrollib [C#],VB Common/WPFxUnit 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的其余性能和个性,敬请关注。