更改Sitefinity默认Web服务的响应格式

时间:2019-05-17 14:40:14

标签: c# web-services content-management-system odata sitefinity

我已经参考文档https://www.progress.com/documentation/sitefinity-cms/create-a-web-service为我的Sitefinity网站创建了Web服务,并且已将OData用于所有过滤器选择等。

下面是我从其中一个Web服务获得的示例响应。

{
"@odata.context": " ",
"value": [
{
"Id": "aa981bde-a977-48db-a0ed-69b077e3fsdf",
"Title": "Define: Problem",
"Order": "2"
},
{
"Id": "9e346ada-dde9-4a0f-a025-2004932f4dfg",
"Title": "Pre-Planning",
"Order": "1"
}
]
}

有没有一种方法可以更改Sitefinity Web服务的响应格式。我想得到像这样的回复:

{
"code": 200,
"data": "THE RESULT OF THE API",
"message": " ",
"status": "OK"
}

code是HttpStatusCode,状态是HttpStatus,数据是API的实际结果。

有人可以帮我吗?

谢谢

Aiswarya

1 个答案:

答案 0 :(得分:0)

到目前为止,还没有办法将OData响应转换为对象(例如,没有API)。

实现此功能的最干净方法是尝试使用response filter,它将解析响应,对其进行转换并将其发送到网络上。到此为止,您将被称为-您将使用Streams,因此您需要:

  1. 以流的形式获取响应
  2. 解析
  3. 更改
  4. 将其隔离回JSON
  5. 将其写回流

但是,这有点简化:

  

响应。过滤器内容已分块

     

因此,要有效地实现Response.Filter,只需要实现自定义流并处理Write()方法即可在编写响应时捕获响应输出。乍一看,这看起来非常简单-您可以在Write中捕获输出,对其进行转换,然后一次性写入转换后的内容。这确实适用于少量内容。但是您看到的问题是,输出是在小的缓冲区块中写入的(看起来少于16k),而不是在流中写入单个Write()语句,这对于ASP.NET将数据流式传输到其中非常有意义。 IIS以较小的块最大程度地减少了沿途的内存使用。