Skip to main content

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);

Resources