🏆作者:科技、互联网行业优质创作者
🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!
Minimal API作为.NET 6的一个崭新特性,其核心理念在于极速构建与开发接口。
这些接口不仅适用于技术验证与探索,同样能够满足轻量且简洁的小应用需求。
简而言之,Minimal API为开发者提供了一种既高效又简便的接口开发能力,使得接口构建变得更加迅速与直观。
01
创建项目
写一个web请求简单接口最少需要几行代码?不严格计较的话,在.NET6下只需要4行代码。
var builder= WebApplication.CreateBuilder(args);
var app = builder1.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
以上代码是在terminal中通过以下命令创建。
dotnet new web -o AAA-f net6.0
创建好后,VSCode打开的目录结构如下,Program.cs就是只有四行代码就能创建一个web请求的源文件。
其中,app.MapGet("/", () => "Hello World")就是Minimal APIs,定义了请求的路由与路由对应的方法,在该项目配置下运行后,web浏览器输入https://localhost:7038后返回Hello World!。
在此基础上,继续添加数据库操作与swagger接口文档,有了这两项才能算上是完整crud应用。
02
添加Swagger接口文档
在VSCode的Termanal进入AAA目录,添加Swagger文档的依赖。
dotnet add package Swashbuckle.AspNetCore --version 6.1.4
在四行代码上添加第1行代码、第6-15行代码和第20-24行代码进行Swagger配置。
using Microsoft.OpenApi.Models;
var builder= WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "Hello World",
Description = "Minimal APIs",
Version = "v1"
});
});
var app = builder1.Build();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Hello APIs v1");
});
app.MapGet("/", () => "Hello World!");
app.Run();
Dotnet run 运行后,浏览器请求:
http://localhost:5157/swagger/index.html
03
创建数据库
这里使用 EFCore操作sqlite,继续在Terminal中添加依赖包。
dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 6.0
dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0
新建Models与DB目录,Models存放的Pizza.cs与PizzaDB.cs文件,这两个文件将被EFCore用来创建sqlite数据库,DB存放数据库文件。
Pizza.cs:
namespace AAA.Models;
public class Pizza
{
public int Id { get; set; }
public string ? Name { get; set; }
public string ? Description { get; set; }
}
PizzaDB.cs
using Microsoft.EntityFrameworkCore;
namespace AAA.Models
{
public class PizzaDB : DbContext
{
public PizzaDB(DbContextOptions options) : base(options)
{
}
public DbSet<Pizza> Pizzas { get; set; } = null!;
}
}
在Program.cs添加使用sqlite的配置。
using Microsoft.OpenApi.Models;
using AAA.Models;
var builder= WebApplication.CreateBuilder(args);
builder.Services.AddSqlite<PizzaDB>("Data Source=DB\\Pizzas.db");
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "Hello World",
Description = "Minimal APIs",
Version = "v1"
});
});
var app = builder1.Build();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Hello APIs v1");
});
app.MapGet("/", () => "Hello World!");
app.Run();
首次使用需要安装EFCore的迁移工具,然后使用该工具依照Pizza.cs与PizzaDB.cs生成对应的数据库。
# 安装ef工具
dotnet tool install --global dotnet-ef
# 初始化数据库,生成Migrations目录
dotnet ef migrations add InitialCreate
# 生成数据库文件
dotnet ef database update
运行后的目录详情:
04
添加数据库操作
因为使用了EFCore,再加上Minimal APIs的神助,所以比较简单。
using AAA.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqlite<PizzaDB>("Data Source=DB\\Pizzas.db");
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "Hello World",
Description = "Minimal APIs",
Version = "v1"
});
});
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Hello APIs v1");
});
app.MapGet("/", () => "Hello World!");
app.MapGet("/pizzas/initial", async (PizzaDB db) =>
{
await db.Pizzas.AddRangeAsync(new Pizza[]{
new Pizza{Id=1,Name="Pizza1",Description="p1"},
new Pizza{Id=2,Name="Pizza2",Description="p2"},
new Pizza{Id=3,Name="Pizza3",Description="p3"},
new Pizza{Id=4,Name="Pizza4",Description="p4"},
new Pizza{Id=5,Name="Pizza5",Description="p5"}
});
await db.SaveChangesAsync();
return Results.Ok();
});
app.MapGet("/pizzas", async (PizzaDB db) => await db.Pizzas.ToListAsync());
app.MapGet("/pizzas/{id}", async (PizzaDB db, int id) => await db.Pizzas.FindAsync(id));
app.MapPost("/pizzas", async (PizzaDB db, Pizza data) =>
{
await db.Pizzas.AddAsync(data);
await db.SaveChangesAsync();
return Results.Created($"/pizza/{data.Id}", data);
});
app.MapPut("/pizza/{id}", async (PizzaDB db, Pizza data, int id) =>
{
var pizza = await db.Pizzas.FindAsync(id);
if (pizza is null) return Results.NotFound();
pizza.Name = data.Name;
pizza.Description = data.Description;
await db.SaveChangesAsync();
return Results.NoContent();
});
app.MapDelete("/pizza/{id}", async (PizzaDB db, int id) =>
{
var pizza = await db.Pizzas.FindAsync(id);
if (pizza is null) return Results.NotFound();
db.Pizzas.Remove(pizza);
await db.SaveChangesAsync();
return Results.Ok();
});
app.Run();
基本上就是Program.cs一个文件,100行代码内(去掉空行),就能实现一个简单的操作数据库的crud应用接口。
当我们需要快速验证某些功能的时候,简单操作下就能快速搭建好测试的框架来测试预想的功能需求,彻底突出了使用MInimal APIs能快速构建web应用的优点。
以下演示了运行/pizzas/initial接口初始化数据后,查询所有的示例:
代码下载地址:
https://www.51aspx.com/code/TheCRUDInterface
另外,VSCode占用的内存较大,几乎同VS一样占内存,希望多做优化。
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你升职+涨薪!!
🏆点击下方卡片关注公众号,里面有很多大佬的技术文章,能助你快速成长。还可免费领取如下15个视频教程!回复'面试',获取C#/.NET/.NET Core面试宝典
回复'C#',领取零基础学习C#编程
回复'NET',领取.NET零基础入门到实战
回复'Linux',领取Linux从入门到精通
回复'wpf',领取高薪热门【WPF上位机+工业互联网】从零手写实战
回复'Modbus',领取初识C#+上位机Modbus通信
回复'PLC',领取C#语言与西门子PLC的通信实操
回复'blazor',领取blazor从入门到实战
回复'TypeScript',领取前端热门TypeScript系统教程
回复'vue',领取vue前端从入门到精通
回复'23P',领取C#实现23种常见设计模式
回复'MongoDB',领取MongoDB实战
回复'Trans',领取分布式事务
回复'Lock',领取分布式锁实践
回复'Docker',领取微服务+Docker综合实战
回复'K8s',领取K8s部署微服务
回复'加群',进.NET技术社区交流群