-
Notifications
You must be signed in to change notification settings - Fork 10.7k
Add EndpointNameAttribute to enable setting endpoint name declaratively #34539
Copy link
Copy link
Closed
Labels
Priority:1Work that is critical for the release, but we could probably ship withoutWork that is critical for the release, but we could probably ship withoutarea-minimalIncludes minimal APIs, endpoint filters, parameter binding, request delegate generator etcIncludes minimal APIs, endpoint filters, parameter binding, request delegate generator etcenhancementThis issue represents an ask for new feature or an enhancement to an existing oneThis issue represents an ask for new feature or an enhancement to an existing onefeature-minimal-actionsController-like actions for endpoint routingController-like actions for endpoint routingold-area-web-frameworks-do-not-use*DEPRECATED* This label is deprecated in favor of the area-mvc and area-minimal labels*DEPRECATED* This label is deprecated in favor of the area-mvc and area-minimal labels
Milestone
Metadata
Metadata
Assignees
Labels
Priority:1Work that is critical for the release, but we could probably ship withoutWork that is critical for the release, but we could probably ship withoutarea-minimalIncludes minimal APIs, endpoint filters, parameter binding, request delegate generator etcIncludes minimal APIs, endpoint filters, parameter binding, request delegate generator etcenhancementThis issue represents an ask for new feature or an enhancement to an existing oneThis issue represents an ask for new feature or an enhancement to an existing onefeature-minimal-actionsController-like actions for endpoint routingController-like actions for endpoint routingold-area-web-frameworks-do-not-use*DEPRECATED* This label is deprecated in favor of the area-mvc and area-minimal labels*DEPRECATED* This label is deprecated in favor of the area-mvc and area-minimal labels
Type
Fields
Give feedbackNo fields configured for issues without a type.
Endpoint names are used to lookup endpoints when generating links using
LinkGenerator, and as their unique per application are a good candidate for using as theoperationIdfor an endpoint in OpenAPI (Swagger) documents.Endpoint names are set using the
Microsoft.AspNetCore.Routing.IEndpointNameMetadatainterface. In the framework today this can only be set imperatively by adding an instance ofMicrosoft.AspNetCore.Routing.EndpointNameMetadatato the endpoint's metadata, e.g.builder.WithMetadata(new EndpointNameMetadata("GetTodoById")). (#33924 includes adding a new extension method to allow adding the name in a more first-class fashion, e.g.builder.WithName("GetTodoById")).To support declaratively setting an endpoint name we should add an attribute:
The attribute could be used as following:
app.MapGet("/todos/{id}", + [EndpointName("GetTodoById") async (int id, TodoDb db) => { return await db.Todos.FindAsync(id) is Todo todo ? Results.Ok(todo) : Results.NotFound(); }); app.MapPost("/todos", + [EndpointName("AddTodo") async (Todo todo, TodoDb db) => { db.Todos.Add(todo); await db.SaveChangesAsync(); return Results.CreatedAtRoute("GetTodoById", new { todo.Id }, todo); }); );