Setup
9.1.1. [AutoGenerateEndpoints] — Class-Level Attribute
Applied to any plain class (no base class required). Controls route prefix, tags, auth, strategy, caching, and rate limiting for all methods in the class.
| Property | Type | Default | Description |
|---|---|---|---|
RoutePrefix |
string? |
class name | Route prefix, e.g. "/api/users" |
Tags |
string[]? |
class name | OpenAPI tags |
IncludeClassNameInRoute |
bool |
true |
Include class name in auto-generated route |
RequiresAuth |
bool |
false |
Require authentication for all methods |
Policies |
string[]? |
— | Authorization policy names |
Roles |
string[]? |
— | Allowed roles |
Strategy |
EndpointMappingStrategy |
Convention |
Which methods to map |
CacheSeconds |
int |
0 |
GET response cache duration (class default) |
RateLimitPolicy |
string? |
— | Rate limiting policy name (class default) |
[AutoGenerateEndpoints(
RoutePrefix = "/api/products",
Tags = new[] { "Products", "Catalog" },
RequiresAuth = true,
Policies = new[] { "AdminOnly" },
Strategy = EndpointMappingStrategy.Convention,
CacheSeconds = 60,
RateLimitPolicy = "standard")]
public class ProductController { /* ... */ }
9.1.2. [AutoMapEndpoint] — Method-Level Override
Override or supplement class-level settings per method. Enables explicit routes, custom HTTP methods, method-level auth, and per-method caching/rate limiting. Required when Strategy = Explicit.
| Property | Type | Default | Description |
|---|---|---|---|
route |
string |
(required) | Explicit route template |
HttpMethod |
string |
"GET" |
HTTP method: "GET", "POST", "PUT", "DELETE", "PATCH" |
Name |
string? |
auto | Endpoint name for URL generation |
Tags |
string[]? |
class tags | Override OpenAPI tags |
Summary |
string? |
from method name | Override .WithSummary() |
RequiresAuth |
bool |
class default | Require auth for this method |
Policies |
string[]? |
class default | Authorization policies |
Roles |
string[]? |
class default | Allowed roles |
AllowAnonymous |
bool |
false |
Override class RequiresAuth = true |
CacheSeconds |
int |
0 |
GET cache duration (-1 to disable) |
RateLimitPolicy |
string? |
class default | Rate limit policy ("none" to disable) |
[AutoGenerateEndpoints(RoutePrefix = "/api/orders", RequiresAuth = true)]
public class OrderController
{
// Convention-mapped (GET /api/orders/{id})
public Task<Result<Order>> GetOrder(int id) => ...;
// Explicit override — custom route + HTTP method
[AutoMapEndpoint("/api/orders/{id}/cancel", HttpMethod = "POST",
Summary = "Cancel an order", CacheSeconds = -1)]
public Task<Result<Order>> CancelOrder(int id) => ...;
// Per-method anonymous access override
[AutoMapEndpoint("/api/orders/public", AllowAnonymous = true)]
public Task<Result<List<OrderSummary>>> GetPublicOrders() => ...;
}
9.1.3. HTTP Verb Convention
When Strategy = Convention (default), method names determine HTTP verb and route:
| Method prefix | HTTP verb | Route (no id param) |
Route (with id param) |
|---|---|---|---|
Get* |
GET |
{prefix} |
{prefix}/{id} |
Create* / Add* |
POST |
{prefix} |
{prefix} |
Update* |
PUT |
{prefix} |
{prefix}/{id} |
Delete* |
DELETE |
{prefix} |
{prefix}/{id} |
public Task<Result<List<Product>>> GetProducts() // GET /api/products
public Task<Result<Product>> GetProduct(int id) // GET /api/products/{id}
public Task<Result<Product>> CreateProduct(ProductRequest r) // POST /api/products
public Task<Result<Product>> UpdateProduct(int id, ...) // PUT /api/products/{id}
public Task<Result> DeleteProduct(int id) // DELETE /api/products/{id}
9.1.4. Mapping Strategy
EndpointMappingStrategy controls which methods the generator maps:
| Value | Behaviour |
|---|---|
Convention |
Map methods matching naming conventions (Get*, Create*, Add*, Update*, Delete*) |
Explicit |
Map only methods decorated with [AutoMapEndpoint] |
All |
Map all public methods returning Result<T> or OneOf<...> |
// Convention (default) — naming convention drives mapping
[AutoGenerateEndpoints(RoutePrefix = "/api/users", Strategy = EndpointMappingStrategy.Convention)]
// Explicit — only [AutoMapEndpoint]-decorated methods are mapped
[AutoGenerateEndpoints(RoutePrefix = "/api/admin", Strategy = EndpointMappingStrategy.Explicit)]
// All — every public Result<T>/OneOf<...> method is mapped
[AutoGenerateEndpoints(RoutePrefix = "/api/internal", Strategy = EndpointMappingStrategy.All)]