关于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的其余性能和个性,敬请关注。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理