我剛開始使用ServiceStack,這是一個了不起的庫。ServiceStack並返回流
但是,我有一個業務需求,我們必須返回xml和json,其中xml必須是特定的格式。
例如,我們有現有的期望格式的XML客戶:
<service name="service1" type="audio" .../>
所以基本上一堆屬性。
我知道ServiceStack使用DTO的概念,並使用DataContractSerializer返回xml元素,而不是使用xml屬性在上面的表單中。
我仍然想使用的DTO的請求(通過在應用程序/ xml或application/JSON在接受頭),然後我可以創建自己的XML字符串或JSON字符串,然後返回他們爲:
string result = "....xml or json string...";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
其中結果字符串可以是xml字符串或json字符串。
我注意到小提琴手的迴應Content-Type爲text/html。
隨着我使用的方法,我違反了任何REST原則嗎?目前是否存在Content-Type問題(text/html)?
如果我確實使用這種方法,它確實解決了業務需求。
編輯
我發現我可以返回httpResult爲:
return new HttpResult(
new MemoryStream(Encoding.UTF8.GetBytes(result)), "application/xml");
這給正確的內容類型。
那麼,如果我沿着這條路線走下去,這是正確的方式嗎?
感謝您的幫助。 – 2012-04-06 21:14:43
返回字符串而不是流會有什麼好處嗎? – 2012-04-06 21:16:59
不,它們都直接寫入ASP.NET的HttpResponse OutputStream。因此使用MemoryStream(如果您已經擁有內存中的字符串)會增加額外的開銷。當你想要輸出流時返回一個字符串是有意義的(即避免將整個響應加載到內存中) – mythz 2012-04-06 21:27:28