Ich möchte den POST des folgenden API-Aufrufs verarbeiten:
/v1/location/deviceid/appid
Zusätzliche Parameter kommen vom Post-Body.
Das alles funktioniert gut für mich. Jetzt möchte ich meinen Code erweitern, indem ich zulasse, dass "deviceid" und / oder "appid" und / oder BodyData null sind:
/v1/location/deviceid
/v1/location/appid
/v1/location/
Diese 3 URLs sollten auf demselben Weg antworten.
Mein erster Ansatz (BodyData erforderlich):
[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);
}
Dies funktioniert nicht und gibt einen Kompilierungsfehler zurück:
"Optionale Parameter müssen am Ende stehen"
Nächster Versuch:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
Jetzt bekommt meine Funktion AddNewLocation () immer eine BodyData=null
- auch wenn der Aufruf den Body sendet.
Schließlich habe ich alle 3 Parameter optional eingestellt:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
Arbeite nicht:
Optionaler Parameter
BodyData
wird von nicht unterstütztFormatterParameterBinding
.
Warum möchte ich eine Lösung mit optionalen Parametern? Mein Controller übernimmt nur das "Hinzufügen eines neuen Standorts" über einen POST.
Ich möchte bei falschen Daten meine eigenen Ausnahmen oder Fehlermeldungen senden. Auch wenn der Anruf fehlende Werte hat. In diesem Fall möchte ich in der Lage sein, eine Ausnahme auszulösen oder Standardeinstellungen anhand meines Codes festzulegen.
?
In der Routenvorlage habe ich gesucht. +1