Je veux gérer le POST de l'appel API suivant:
/v1/location/deviceid/appid
Des paramètres supplémentaires proviennent du post-corps.
Tout cela fonctionne bien pour moi. Maintenant, je veux étendre mon code en autorisant "deviceid" et / ou "appid" et / ou BodyData à être null:
/v1/location/deviceid
/v1/location/appid
/v1/location/
Ces 3 URL doivent répondre par la même route.
Ma première approche (BodyData requis):
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody] location_fromuser BodyData)
{
return repository.AddNewLocation(deviceid, appid, BodyData);
}
Cela ne fonctionne pas et renvoie une erreur de compilation:
"Les paramètres facultatifs doivent être à la fin"
Prochain essai:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
Maintenant, ma fonction AddNewLocation () obtient toujours un BodyData=null
- même si l'appel envoie le Body.
Enfin, j'ai mis les 3 paramètres en option:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
Ne fonctionne pas:
Le paramètre facultatif
BodyData
n'est pas pris en charge parFormatterParameterBinding
.
Pourquoi est-ce que je veux une solution avec des paramètres facultatifs? Mon contrôleur ne gère que "l'ajout d'un nouvel emplacement" via un POST.
Je veux envoyer sur de mauvaises données mes propres exceptions ou messages d'erreur. Même si l'appel a des valeurs manquantes. Dans ce cas, je veux pouvoir décider de lever une exception ou de définir les valeurs par défaut par mon code.
?
à l'intérieur du modèle d'itinéraire est ce que je recherchais. +1