
FastAPI是什么?快速上手指南
在现代 Web 开发中,“创建数据”是 API 最基本,也是最常用的操作之一。对于 ASP.NET Core 而言,我们通过 HTTP POST 将客户端传来的 JSON 数据提交到服务器,使用 Entity Framework Core 将其存入数据库。本文将带你从零开始,完整实现一个标准的 POST 接口,包括请求 DTO 设计、AutoMapper 映射、EF Core 的 Add 与 SaveChanges,以及如何优雅地返回 201 Created
响应。
假设我们有一个简单的“股票”(Stock)管理 API,项目目录示例:
/Controllers
StocksController.cs
/Models
Stock.cs
/DTOs
CreateStockRequestDto.cs
/Mappings
StockMapper.cs
/Data
AppDbContext.cs
Id
、Symbol
、CompanyName
、PurchasePrice
、LastDividend
、Industry
、MarketCap
等属性。DbSet < Stock >
。AddDbContext
与路由、控制器。[FromBody]
接收绑定到 DTO。DbContext.Add(entity)
将实体置为“跟踪”状态,但不立即写入数据库。SaveChanges()
时,EF Core 才会将变更写入数据库。CreatedAtAction
返回包含新资源 URL 的 201 Created
响应。为了避免前端或用户提交不必要或敏感字段,需要单独定义 Create Request DTO:
public class CreateStockRequestDto
{
public string Symbol { get; set; }
public string CompanyName { get; set; }
public decimal PurchasePrice{ get; set; }
public decimal LastDividend { get; set; }
public string Industry { get; set; }
public long MarketCap { get; set; }
}
DTO 只负责接收外部数据,写库前需转换成 EF 实体 Stock
:
public static class StockMapper
{
public static Stock FromCreateDto(CreateStockRequestDto dto)
{
return new Stock
{
Symbol = dto.Symbol,
CompanyName = dto.CompanyName,
PurchasePrice = dto.PurchasePrice,
LastDividend = dto.LastDividend,
Industry = dto.Industry,
MarketCap = dto.MarketCap
};
}
}
在 StocksController.cs
中添加创建方法:
[HttpPost]
public IActionResult CreateStock([FromBody] CreateStockRequestDto dto)
{
// 1. DTO 转实体
var stock = StockMapper.FromCreateDto(dto);
// 2. 添加到 DbContext
_context.Stocks.Add(stock);
// 3. 持久化到数据库
_context.SaveChanges();
// 4. 返回 201 Created,并包含新资源 URL
return CreatedAtAction(
nameof(GetStockById),
new { id = stock.Id },
stock
);
}
_context.Stocks.Add(stock);
_context.SaveChanges();
return CreatedAtAction(
nameof(GetStockById),
new { id = stock.Id },
stock
);
dotnet watch run
。Postman/Swagger:
/api/stocks
,Body 填入 DTO JSON。Location
头看到新资源 URL。Stocks
表中插入了新记录。Add
仅跟踪,SaveChanges()
真正提交。CreatedAtAction
返回 201 Created
和资源 URL。通过以上步骤,你已掌握 ASP.NET Core 中标准 POST 创建接口的核心技巧,助你快速、高质量地交付 API。
原文引自YouTube视频:https://www.youtube.com/watch?v=yxQ9CSwc_uk