Delen via


ASP0007: Routeparameter en argument optionaliteit komt niet overeen

Waarde
Regel-id ASP0007
Categorie Gebruik
De oplossing veroorzaakt brekende of niet-brekende problemen Niet-afbreekbaar

Oorzaak

Een routeparameter wordt gedeclareerd als vereist in de definitie Delegeren, maar is gemarkeerd als optioneel in de eindpuntroute.

Beschrijving van regel

Wanneer een eindpunt wordt gedeclareerd, kan de optionaliteit van parameters zowel in de routesjabloon als in de argumenten van de route-handler worden vastgelegd. Wanneer een parameter wordt gedeclareerd als optioneel in de handler, moet deze ook worden gedeclareerd als optioneel in de routesjabloon. GET /todos kan bijvoorbeeld geen overeenkomst vinden voor de volgende code:

app.MapGet("/todos/{id}", (int? id) => {});

De voorgaande code komt niet overeen met GET /todos omdat de id parameter niet is opgegeven, ook al wordt deze als optioneel behandeld in de route-handler.

Hoe schendingen op te lossen

Als u een schending van deze regel wilt oplossen, moet u ervoor zorgen dat de optioneelheid in de routesjabloon en de gemachtigde overeenkomen. Bijvoorbeeld voor het volgende codevoorbeeld:

app.MapGet("/todos/{id}", (int? id) => {});

Maak het type niet-null als de parameter vereist is, door ? uit int? te verwijderen.

app.MapGet("/todos/{id}", (int id) => {});

Als de parameter bedoeld is om optioneel te zijn, moet de operator voor het nullbare waarde type worden toegepast:

app.MapGet("/todos/{id?}", (int? id) => {});

Wanneer waarschuwingen onderdrukken

Onderdruk geen waarschuwing van deze regel. Niet-overeenkomende parameter optionaliteit kan leiden tot onverwacht gedrag met routering tijdens runtime.