我正在嘗試CreatedAtRoute在最小的 API 中使用。
app.MapGet("/clients/{id:int}", [EndpointName("GetClientById")] async (int id, ClientsContext db) =>
await db.Clients.SingleOrDefaultAsync(client => client.Id == id));
app.MapPost("/clients", async (ClientsContext db, Client client) =>
{
var newClient = db.Add(client);
await db.SaveChangesAsync();
var entity = newClient.Entity;
var url = $"{host}/clients/{newClient.Entity.Id}";
return Results.CreatedAtRoute(
routeName: "GetClientById",
routeValues: new { id = entity.Id },
value: entity);
});
我使用EndpointName屬性來命名我在 POST 請求中參考的端點。但是,我得到了例外:
System.InvalidOperationException:沒有路由與提供的值匹配。
這很奇怪,因為 url 模式中只有一個引數 - id。
一個小筆記
您可以使用WithName而不是[EndpointName]屬性:
app
.MapGet("/clients-m/{id:int}", async (int id, ClientsContext db) =>
await db.ClientsM.SingleOrDefaultAsync(client => client.Id == id))
.WithName("GetClientByIdAsync");
uj5u.com熱心網友回復:
對于最少的 API,請嘗試使用.WithName來設定EndpointNameAttributeie
app.MapGet("/clients/{id:int}", async (int id, ClientsContext db) =>
await db.Clients.SingleOrDefaultAsync(client => client.Id == id))
.WithName("GetClientById");
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/475673.html
上一篇:我應該在catch中回傳什么值?
