Voglio gestire il POST della seguente chiamata API:
/v1/location/deviceid/appid
Parametri aggiuntivi provengono dal Post-Body.
Funziona tutto bene per me. Ora desidero estendere il mio codice consentendo a "deviceid" e / o "appid" e / o BodyData di essere nulli:
/v1/location/deviceid
/v1/location/appid
/v1/location/
Questi 3 URL dovrebbero rispondere con lo stesso percorso.
Il mio primo approccio (BodyData richiesto):
[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);
}
Questo non funziona e restituisce un errore di compilazione:
"I parametri facoltativi devono essere alla fine"
Prova successiva:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
Ora la mia funzione AddNewLocation () ottiene sempre un BodyData=null
- anche se la chiamata invia il Body.
Infine ho impostato tutti e 3 i parametri opzionali:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
Non funziona:
Il parametro facoltativo
BodyData
non è supportato daFormatterParameterBinding
.
Perché voglio una soluzione con parametri opzionali? Il mio controller gestisce solo "l'aggiunta di una nuova posizione" tramite un POST.
Voglio inviare su dati errati le mie eccezioni o messaggi di errore. Anche se la chiamata ha valori mancanti. In questo caso voglio essere in grado di decidere di lanciare un'eccezione o Impostazione dei valori predefiniti dal mio codice.
?
all'interno del modello di percorso è quello che stavo cercando. +1