Ho appena iniziato a utilizzare ServiceStack che è una straordinaria libreria.ServiceStack e restituzione di un flusso
Tuttavia, ho un requisito aziendale in cui dobbiamo restituire xml e json dove il xml deve essere nel formato specifico.
per esempio abbiamo clienti esistenti che si aspettano xml del formato:
<service name="service1" type="audio" .../>
in modo sostanzialmente un gruppo di attributi.
So che ServiceStack utilizza concetti di DTO e utilizza DataContractSerializer che restituisce elementi xml anziché nel modulo sopra con attributi xml.
ho ancora voglia di utilizzare i DTOS per le richieste (di passaggio in application/xml o application/json nell'intestazione Accept) e posso quindi creare le mie stringhe XML o stringhe JSON e poi ritorno, se:
string result = "....xml or json string...";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
dove la stringa del risultato può essere una stringa xml o una stringa json.
Ho notato nel violinista la risposta Content-Type come text/html.
Con l'approccio che sto utilizzando, sto violando i principi REST? Ci saranno problemi con il Content-Type così com'è attualmente (text/html)?
Se utilizzo questo approccio, risolve i requisiti aziendali.
Modifica
ho trovato che posso restituire un httpResult come:
return new HttpResult(
new MemoryStream(Encoding.UTF8.GetBytes(result)), "application/xml");
che dà il corretto tipo di contenuto.
Quindi, è questo il modo giusto o avrò problemi se scenderò questa rotta?
Grazie per l'aiuto. –
Potrebbe esserci qualche vantaggio nel restituire una stringa anziché uno stream? –
No, entrambi vengono scritti direttamente su HttpResponse OutputStream di ASP.NET. Pertanto l'uso di un MemoryStream (se si dispone già della stringa in memoria) aggiunge un ulteriore sovraccarico. Ha senso restituire una stringa quando si desidera eseguire lo streaming dell'output (ovvero evitare di caricare l'intera risposta in memoria) – mythz