Stellen Sie sich vor, dass ich eine WebAPI Aktion definiert haben, wie folgt:Mit Wörterbuch-Style-Daten-Typen in Swagger
[HttpGet]
public string GetFirstValue(KeyValuePair<string, string>[] data)
{
data = data ?? new KeyValuePair<string, string>[0];
return data.Any() ? data.ElementAt(0).Value : "No items supplied";
}
Ich habe ein Modell-Binder jede Abfrage-String-Parameter in einem Array-Eintrag zu konvertieren.
Sie würden es mögen nennen:
http://localhost/MyController/GetFirstValue?Fruit1=Apple&Fruit2=Banana
Die Modell-Bindemittel wandeln diese in eine Anordnung wie [{Fruit1=Apple},{Fruit2=Banana}]
, und die Aktion kehrt Apple
(wie, dass der erste Eintrag ist).
Ich möchte dies mithilfe von Swagger dokumentieren, aber die Standardimplementierung von Swagger UI erzeugt am Ende eine URL, die alle Daten in mehrere Abfragezeichenfolgenparameter namens data
legt, was meiner API nicht offen steht.
http://localhost:9102/MyController/GetFirstValue?data=Fruit1%3DBanana&data=Fruit2%3DApple
Irgendwelche Ideen? Ich bin froh, einen anderen Datentyp in meinem Aktionsparameter zu verwenden, z. B. Dictionary<string, string>
oder IEnumerable oder ähnlich - solange es sich um einen erweiterbaren Mechanismus zur Bereitstellung beliebiger Schlüssel/Werte handelt.
Ja, das dachte ich mir. Wir brauchen jedoch die willkürliche Parameter-Sache - in unserem Fall ist es für die Angabe einer Liste von Filtern, wo die Datenschlüssel, die Sie filtern, zur Laufzeit definiert werden. Que Seren. –
Hmm, bisschen klobig, aber wie wäre es mit einem "Schlüssel" -Parameter und einem "Werte" -Parameter, beide vom Typ Array [string]? Dann könnten die Leute http: // localhost/MyController/GetFirstValue aufrufen? Key = fruit1 & value = apple & key = fruit2 & value = banana –
Ja, ich könnte auch "? Filter = key1% 3Dvalue1 & filter = key23Dvalue2" haben, aber beide scheinen bei der Abfrage sehr klobig zu sein Saiten sind schon KV-Paare! –