Minimal API - 返回值 TypedResults 与 Results

210 阅读1分钟

Results

这是一个静态类,内部所有方法全部静态。返回值全部 IResult

image.png

record Todo(string Title, string Content);

app.MapGet("todos", ()=>{
  return Results.Ok([
      new Todo("购物" , "买醋、酱油"),
      new Todo("麻将" , "和王老太太、李老头、张老头打麻将")
  ]);
});

TypedResults

TypedResults类是Results类的类型化等效类。

image.png

record Todo(string Title, string Content);

app.MapGet("todos", GetAllTodosAsync);
app.MapGet("todos/{id}", GetTodoByIdAsync);

static async Task<Ok<List<Todo>>> GetAllTodosAsync(AppDbContext db)
{
    var todos = await db.Todos.ToListAsync();
    return TypedResults.Ok(todos);
}

static async Task<Results<Ok<Todo>, NotFound>> GetTodoByIdAsync(AppDbContext db, int id)
{
    return await db.Todos.FindAsync(id) is Todo todo ? 
           TypedResults.Ok(todo) :
           TypedResults.NotFound();
}

总结

对于类型敏感如:测试、OpenAPI用途时 TypedResults 一定是最优,而且返回值一定采用Results<> (不要怕麻烦,你都使用类型系统了)。