Ich habe gerade angefangen, ServiceStack zu verwenden, die eine erstaunliche Bibliothek ist.ServiceStack und einen Stream zurückgeben
Allerdings habe ich eine Geschäftsanforderung, wo wir xml und json zurückgeben müssen, wo die XML in einem bestimmten Format sein muss.
Zum Beispiel haben wir bestehende Kunden, die xml des Formats erwarten:
<service name="service1" type="audio" .../>
also im Grunde eine Reihe von Attributen.
Ich weiß, dass ServiceStack Konzepte von DTOs verwendet und den DataContractSerializer verwendet, der XML-Elemente lieber als in der obigen Form mit XML-Attributen zurückgibt.
Ich mag noch die DTOs für Anfragen verwenden (vorbei in application/xml oder application/json in den Accept-Header) und dann kann ich meine eigenen XML-Strings oder json Strings erstellen und bringt sie dann als:
string result = "....xml or json string...";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
wobei die Ergebniszeichenfolge eine XML-Zeichenfolge oder eine JSON-Zeichenfolge sein könnte.
Ich bemerkte in fiddler die Antwort Content-Type als Text/html.
Mit dem Ansatz, den ich verwende, verletze ich irgendwelche REST-Prinzipien? Wird es Probleme mit dem Inhaltstyp geben, wie er gerade ist (Text/HTML)?
Wenn ich diesen Ansatz verwende, löst es die Geschäftsanforderungen.
bearbeiten
Ich fand, dass ich eine httpResult wie zurückgeben kann:
return new HttpResult(
new MemoryStream(Encoding.UTF8.GetBytes(result)), "application/xml");
, die gibt den richtigen Content-Type.
Also, ist das der richtige Weg oder werde ich Probleme haben, wenn ich diesen Weg gehe?
Vielen Dank für die Hilfe. –
Wäre es von Vorteil, eine Zeichenfolge anstelle eines Streams zurückzugeben? –
Nein, beide werden direkt in ASP.NETs HttpResponse OutputStream geschrieben. Wenn Sie daher einen MemoryStream verwenden (wenn Sie die Zeichenfolge bereits im Speicher haben), wird zusätzlicher Overhead hinzugefügt. Es ist sinnvoll, eine Zeichenkette zurückzugeben, wenn Sie die Ausgabe streamen wollen (z. B. vermeiden, die gesamte Antwort in den Speicher zu laden). – mythz