当前位置: 首页 > news >正文

ASP.NET Core 中基于 Minimal APIs 的Web API

基于 Minimal APIs 的Web API

Minimal APIs 是ASP.NET Core中快速构建 REST API 的方式,可以用最少的代码构建全功能的REST API。比如下面三行代码:

var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run();

可以实现在请求网站根目录结点的时候,返回"Hello World!"。
这种方式的Web API可以用于构建微服务,极简功能的网站。

映射 HTTP 请求

下面代码,将几个 HTTP 请求的 url映射到 Lambda 函数中,分别是:

  • HTTP GET,/todoitems ,获取所有todoitems
  • HTTP GET,/todoitems/complete,获取所有完成的todoitems
  • HTTP GET,/todoitems/{id},获取某个 id 的todoitem
  • HTTP Post,/todoitems,添加一个todoitem
  • HTTP PUT,/todoitems/{id},修改某个 id 的todoitem
  • HTTP DELETE,/todoitems/{id},删除某个 id 的todoitem
using Microsoft.EntityFrameworkCore;var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<TodoDb>(opt => opt.UseInMemoryDatabase("TodoList"));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
var app = builder.Build();app.MapGet("/todoitems", async (TodoDb db) =>await db.Todos.ToListAsync());app.MapGet("/todoitems/complete", async (TodoDb db) =>await db.Todos.Where(t => t.IsComplete).ToListAsync());app.MapGet("/todoitems/{id}", async (int id, TodoDb db) =>await db.Todos.FindAsync(id)is Todo todo? Results.Ok(todo): Results.NotFound());app.MapPost("/todoitems", async (Todo todo, TodoDb db) =>
{db.Todos.Add(todo);await db.SaveChangesAsync();return Results.Created($"/todoitems/{todo.Id}", todo);
});app.MapPut("/todoitems/{id}", async (int id, Todo inputTodo, TodoDb db) =>
{var todo = await db.Todos.FindAsync(id);if (todo is null) return Results.NotFound();todo.Name = inputTodo.Name;todo.IsComplete = inputTodo.IsComplete;await db.SaveChangesAsync();return Results.NoContent();
});app.MapDelete("/todoitems/{id}", async (int id, TodoDb db) =>
{if (await db.Todos.FindAsync(id) is Todo todo){db.Todos.Remove(todo);await db.SaveChangesAsync();return Results.NoContent();}return Results.NotFound();
});app.Run();
http://www.lryc.cn/news/147928.html

相关文章:

  • Unity ProBuilder SetUVs 不起作用
  • c#接口(interface)
  • SSH远程连接macOS服务器:通过cpolar内网穿透技术实现远程访问的设置方法
  • 【C++】Visual Studio EditorConfig 格式设置
  • 服务器单机大规模数据存储方案
  • ElasticSearch-集成ik分词器
  • c++版opencv求二值图的质心
  • 6、深入解析Kotlin类与对象:构造、伴生、单例全面剖析
  • 【开源ESP32谷歌恐龙小游戏】【游戏演示和介绍】LVGL ST7789 适用于Arduino
  • openCV实战-系列教程7:轮廓检测2与模板匹配(轮廓检测/轮廓特征/轮廓近似/轮廓边界矩阵/轮廓边界圆/模版匹配)、原理解析、源码解读
  • cs231n_1_IntroToConv
  • OPENCV实现SURF特征检测
  • Android Gradle 同步优化
  • BeautifulSoup:学习使用BeautifulSoup库进行HTML解析和数据提取。
  • 基于沙猫群算法优化的BP神经网络(预测应用) - 附代码
  • PCL 判断三点共线(三维空间)
  • 【数据库】事务(概念和特点)
  • LA@齐次线性方程组解的结构
  • Docker修改容器ulimit的全部方案及各方案的详细步骤
  • 进程间通信-Binder
  • 一个简单的vim例子
  • sql server 备份到网络共享
  • 程序与进程
  • 大模型从入门到应用——LangChain:链(Chains)-[链与索引:图问答(Graph QA)和带来源的问答(QA with Sources)]
  • spark sql 数据倾斜--join 同时开窗去重的问题优化
  • lv3 嵌入式开发-linux介绍及环境配置
  • RabbitMQ工作模式-路由模式
  • StringIO BytesIO
  • 通讯录管理系统(个人学习笔记黑马学习)
  • [SpringBoot3]远程访问@HttpExchange