Obiettivo: Sto progettando un'API REST che consente all'utente di passare parametri sulla stringa di query per una richiesta HTTP GET. Qualcosa di simileModifica il nome del parametro per Swagger JSON generato tramite Swashbuckle in .NET Web API 2
http://fake.api.com/search?api-key=1235&term=car&rows=10
Implementazione: sul lato server Ho un modello legante che prende i 3 parametri - API-chiave, termine, e le righe e li converte in un oggetto C# in modo che il mio metodo di azione del controller non deve analizzare la stringa di query. Quindi la firma del metodo azione di controllo simile a
public IHttpActionResult Get(RequestObject request)
Problema: quello che sto funzionando in con Swagger è quando si genera la documentazione e il test harness, è che elenca i parametri di input come request.api-chiave , request.term e request.rows. Questo perché JSON sta ricevendo dal server sta anteponendo il nome dell'oggetto a questi valori. Così, quando si tenta di utilizzare Swagger UI per fare una richiesta HTTP GET, si costruisce l'URL come
http://fake.api.com/search?request.api-key=1235&request.term=car&request.rows=10
Che è una richiesta non corretta per il server. Ora posso facilmente rendere più intelligente il mio modello legacy per ignorare semplicemente la "richiesta". parte, ma sembra un modo arretrato per risolvere questo problema.
Domanda: come posso personalizzare JSON generato da Swashbuckle -> Swagger sul lato server in modo che i nomi dei parametri per questo particolare oggetto non siano preceduti dal nome dell'oggetto? Ho esaminato sia ISchemaFilter che IDocumentFilter che l'API di estensibilità di Swashbuckle espone, ma non vedo un modo pulito per farlo. Può essere possibile, ma un esempio potrebbe essere d'aiuto in questo caso.
si può indicare quale parte del link fornito era di interesse? Hai dovuto implementare la logica da solo (dividere il nome con ".) O era un built-in swashbuckle che hai appena dovuto chiamare in IOperationFilter? – ke3pup
Ho appena usato l'IOperationFilter, e sì ho diviso su". "Manualmente, no Magia lì, un modo più elegante sarebbe quello di decorare ogni proprietà di quella classe e riflettere e quindi analizzare questi, ma sono stato premuto in tempo, quindi sono andato con la soluzione meno elegante di analizzarlo. – codelove
Sai Baba è ora in grado di farlo senza questo soluzione alternativa? +1 per 'IOperationFilter' non sapeva nemmeno che esistesse una cosa del genere lol. – Barak