01-aspnet-core-web-api入门

知识库
知识库文档
/tech-stacks/csharp/tutorial/01-aspnet-core-web-api入门.md

文档

C# 入门篇:ASP.NET Core Web API 实战

背景

ASP.NET Core 是微软开源的跨平台 Web 框架,在 TechEmpower 基准测试中常年 Top 10。本教程带你构建一个完整的图书管理 Web API。

核心概念

1. 中间件管道

请求依次经过每个中间件,构成管道(Pipeline)。内置中间件:异常处理、静态文件、路由、认证、CORS。

var app = builder.Build();
app.UseExceptionHandler("/error");
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();

2. 依赖注入(DI)

.NET 内置 IoC 容器。注册服务后,通过构造函数自动注入。

// 注册(Program.cs)
builder.Services.AddScoped<IBookService, BookService>();
builder.Services.AddDbContext<AppDbContext>(...);

// 注入(Controller)
public class BooksController : ControllerBase
{
    private readonly IBookService _service;
    public BooksController(IBookService service) => _service = service;
}

3. 配置系统

支持 appsettings.json、环境变量、命令行参数,自动合并。

// appsettings.json
{
  "ConnectionStrings": {
    "Default": "Data Source=app.db"
  }
}
// 读取
var connStr = builder.Configuration.GetConnectionString("Default");

分步操作

第一步:创建项目

dotnet new webapi -n BookApi
cd BookApi
dotnet add package Microsoft.EntityFrameworkCore.Sqlite

第二步:定义模型与 DbContext

// Models/Book.cs
public class Book
{
    public int Id { get; set; }
    public string Title { get; set; } = "";
    public string Author { get; set; } = "";
    public decimal Price { get; set; }
}

// Data/AppDbContext.cs
public class AppDbContext : DbContext
{
    public DbSet<Book> Books => Set<Book>();
    public AppDbContext(DbContextOptions<AppDbContext> opts) : base(opts) {}
}

第三步:创建 Service 层

public interface IBookService
{
    Task<List<Book>> GetAllAsync();
    Task<Book?> GetByIdAsync(int id);
    Task<Book> CreateAsync(Book book);
    Task<bool> UpdateAsync(int id, Book book);
    Task<bool> DeleteAsync(int id);
}

第四步:编写 Controller

利用 [ApiController] 属性自动处理模型验证错误。

第五步:数据库迁移

dotnet ef migrations add InitialCreate
dotnet ef database update

思考题

  1. AddScopedAddSingletonAddTransient 三种生命周期有什么区别?
  2. 中间件顺序为什么重要?如果 UseAuthentication 放在 UseAuthorization 之后会怎样?
  3. Entity Framework Core 的 AsNoTracking() 什么场景使用?

信息

路径
/tech-stacks/csharp/tutorial/01-aspnet-core-web-api入门.md
更新时间
2026/5/30