Asp.net 最小 API 按用户名(字符串)查找

Asp.net Minimal API find by username(string)

我想创建 return 通过用户名(字符串)传输数据的端点。

按 ID 查找有效。它列出了具有给定 ID 的数据。

app.MapGet("/store/{id}", async (StoreDb db, int id) => await db.Stores.FindAsync(id))
   .RequireAuthorization();

但是使用 name(string) 不起作用。

app.MapGet("/store/{name}", async (StoreDb db, string name) => await db.Stores.FindAsync(name))
   .RequireAuthorization();

架构:

Store {
    id integer($int32)
    name string
}

Json :

{
  "id": 0,
  "name": "string"
}

它不起作用,因为 FindAsync 方法试图使用 id 查找您的记录,您只是在他的参数中传递不同的数据,您应该做的是这样的

app.MapGet("/store/{name}", async (StoreDb db, string name) => await db.Stores.Where(s => s.name == name).FirstOrDefault()).RequireAuthorization();

但是当有冗余名称时,按名称检索会产生一些问题,因此您应该将 FirstOrDefault() 更改为 ToListAsync(),这更适合这种情况

app.MapGet("/store/{name}", async (StoreDb db, string name) => await db.Stores.Where(s => s.name == name).ToListAsync()).RequireAuthorization();