Routing Patterns
Endpoint Routing
var app = builder.Build();
app.UseRouting(); // Match endpoint
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
Route Templates
Minimal APIs
app.MapGet("/api/products", GetProducts);
app.MapGet("/api/products/{id:int}", GetProduct);
app.MapPost("/api/products", CreateProduct);
app.MapPut("/api/products/{id}", UpdateProduct);
app.MapDelete("/api/products/{id}", DeleteProduct);
Controllers
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet]
public IActionResult GetAll() { }
[HttpGet("{id:int}")]
public IActionResult Get(int id) { }
}
Route Constraints
app.MapGet("/products/{id:int}", handler); // Must be int
app.MapGet("/products/{id:min(1)}", handler); // Min value
app.MapGet("/products/{id:range(1,100)}", handler); // Range
app.MapGet("/files/{filename:regex(.*\\.pdf)}", handler); // Regex
Route Groups (ASP.NET Core 7+)
var api = app.MapGroup("/api");
var products = api.MapGroup("/products")
.WithTags("Products")
.RequireAuthorization();
products.MapGet("/", GetAll);
products.MapGet("/{id}", GetById);
products.MapPost("/", Create);