我刚刚开始使用ServiceStack这是一个了不起的库。
但是,我有一个业务要求,我们必须返回xml和json,其中xml必须是特定格式。
例如,我们的客户希望xml具有以下格式:
<service name="service1" type="audio" .../>
所以基本上是一堆属性。
我知道ServiceStack使用DTO的概念并使用DataContractSerializer,它返回xml元素而不是上面的形式,带有xml属性。
我仍然希望将DTO用于请求(在Accept标头中传入application / xml或application / json)然后我可以创建自己的xml字符串或json字符串,然后将它们返回为:
string result = "....xml or json string...";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
其中结果字符串可以是xml字符串或json字符串。
我在fiddler中注意到Content-Type为text / html。
根据我使用的方法,我是否违反了任何REST原则? Content-Type是否会出现问题(text / html)?
如果我使用这种方法,它确实解决了业务需求。
修改
我发现我可以将httpResult返回为:
return new HttpResult(
new MemoryStream(Encoding.UTF8.GetBytes(result)), "application/xml");
,它提供了正确的内容类型。
那么,这是正确的方式,还是如果我沿着这条路走下去会有问题吗?
答案 0 :(得分:17)
是的,返回IHttpResult将允许您根据需要控制确切的有效负载,Content-Type和其他HTTP标头。
此外,您不仅限于返回流,即您可以使用HttpResult返回具有不同Content-Type的xml字符串。
以下是一些链接,可以更好地展示ServiceStack返回类型的可能性:
您还可以使用FileInfo对象返回静态文件,并使用可选参数将文件作为附件返回,该附件将提示用户下载文件,而不是尝试在浏览器中查看文件:
return new HttpResult(new FileInfo("~/static-response.xml"), asAttachment:true);