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.
quelle
?
In der Routenvorlage habe ich gesucht. +1?
Zeichen als optional markieren, müssen wir den Parametern in der Methodensignatur Standardwerte bereitstellen, z. B. MyMethod (string name = "someDefaultValue", int? Id = null).Weitere Informationen: Wenn Sie eine Routenbeschränkung verwenden möchten , stellen Sie sich vor, Sie möchten erzwingen, dass der Parameter den Datentyp int hat. Dann müssen Sie diese Syntax verwenden:
Die ? Zeichen werden immer vor den letzten gesetzt } Zeichen
Weitere Informationen finden Sie unter: Optionale URI-Parameter und Standardwerte
quelle
Meinen Kommentar in eine Antwort umwandeln, um die Antwort von @Kiran Chala zu ergänzen, da sie für das Publikum hilfreich erscheint.
Wenn wir einen Parameter in der Aktion uri using
?
Zeichen als optional markieren, müssen wir den Parametern in der Methodensignatur Standardwerte wie folgt geben:MyMethod(string name = "someDefaultValue", int? Id = null)
quelle