aspnetcore/diagnostics/asp0007.md
| Value | |
|---|---|
| Rule ID | ASP0007 |
| Category | Usage |
| Fix is breaking or non-breaking | Non-breaking |
A route parameter is declared as required in the Delegate definition but is marked as optional in the endpoint route.
When an endpoint is declared, optionality of parameters can be declared in both the route template and in the route handler arguments. When a parameter is declared as optional in the handler, it must also be declared as optional in the route template. For example, GET /todos fails to resolve a match for the following code:
app.MapGet("/todos/{id}", (int? id) => {});
The preceding code fails to match GET /todos because the id parameter was not provided, even though it is treated as optional in the route handler.
To fix a violation of this rule, make sure that the optionality in the route template and the delegate match. For example, for the following code sample:
app.MapGet("/todos/{id}", (int? id) => {});
If the parameter is intended to be required, make the type non-nullable by removing the ? from int?:
app.MapGet("/todos/{id}", (int id) => {});
If the parameter is intended to be optional, then the nullable value type operator ? should be applied:
app.MapGet("/todos/{id?}", (int? id) => {});
Do not suppress a warning from this rule. Mismatched parameter optionality can result in unexpected behavior with routing at runtime.