Il modo migliore per supportare i dati di post "application / x-www-form-urlencoded" con WCF?

StackOverflow https://stackoverflow.com/questions/604463

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);
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top