Il modo migliore per supportare i dati di post "application / x-www-form-urlencoded" con WCF?
-
03-07-2019 - |
Domanda
Sto creando un servizio WCF basato su una specifica W3C che definisce un endpoint del servizio Web RESTful che accetta " application / x-www-form-urlencoded " pubblicare dati. WCF non supporta questo tipo di codifica dei messaggi per impostazione predefinita e ho trovato diversi esempi di creazione di un contratto simile al seguente:
XElement Query_Post(Stream postData);
E poi nell'implementazione decodifica il flusso postData
usando il metodo HttpUtility.ParseQueryString
.
Qualcuno sa di un modo più fortemente tipizzato di supportare " application / x-www-form-urlencoded " in WCF?
Vorrei che il mio contratto operativo fosse:
XElement Query_Post(string query, string [] params);
Soluzione
Il modo migliore è usare Stream
come POST HTTP non elaborato con WCF o cosa stai dicendo.
Il motivo è che WCF estrae dal layout del servizio tutti gli elementi del layout fisico a livello di comunicazione. Idealmente, vorresti creare un servizio che potrebbe trasformarsi in SOAP o REST semplicemente premendo l'interruttore.
Per supportarlo in modo nativo, probabilmente è necessario estendere WebHttpBinding
o creare il proprio binding e implementare codificatore personalizzato . Questo è simmetrico all'output come dice il post collegato. Devi girare le braccia per fare in modo che WCF generi output non XML / JSON.
Altri suggerimenti
La libreria Contrib WCEST REST abilita questa funzionalità:
https://github.com/mikeobrien/WcfRestContrib
Include un formattatore POX e un formattatore codificato in forma URL e ti consente di crearne uno tuo. I formattatori vengono mappati sui tipi MIME e automaticamente selezionati per serializzare / deserializzare il corpo dell'entità in base al tipo di contenuto e accettare le intestazioni.