乐趣区

关于c#:尝新体验ASPNET-Core-6预览版本中发布的最小Web-APIminimal-APIS新特性

本文首发于 码友网 –《创立 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/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 的其余性能和个性,敬请关注。

退出移动版