【问题标题】:Change the response format of Sitefinity default web services更改 Sitefinity 默认 Web 服务的响应格式
【发布时间】:2019-05-17 14:40:14
【问题描述】:

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

以下是我从其中一项网络服务获得的示例响应。

{
"@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 网络服务的响应格式。我想得到这样的回应:

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

code是HttpStatusCode,status是HttpStatus,data是API的实际结果。

谁能帮帮我。

谢谢,

艾斯瓦娅

【问题讨论】:

  • 也许更容易编写自己的 web api 并返回你想要的任何响应
  • @VeselinVasilev 感谢您的回复。在我自己写之前,我想确认还有其他更好的方法。

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


【解决方案1】:

目前还没有办法连接到某个地方并将 OData 响应转换为一个对象(例如,没有 API)。

实现此功能的最简洁方法是尝试使用 response filter ,它将解析响应、转换它并将其发送到网络中。在您被呼叫时 - 您将使用 Streams,因此您需要:

  1. 以流形式获取响应
  2. 解析它
  3. 改变它
  4. 将其转回 JSON 格式
  5. 将其写回到流中

不过,这有点简化:

Response.Filter 内容被分块

因此,要有效地实现 Response.Filter 只需要您实现自定义流并处理 Write() 方法以在写入时捕获响应输出。乍一看,这似乎很简单——您在 Write 中捕获输出,对其进行转换,然后一次性写出转换后的内容。这确实适用于少量内容。但是你看,问题在于输出是写在小的缓冲区块中(看起来比 16k 小),而不是一个单一的 Write() 语句到流中,这对于 ASP.NET 将数据流回IIS 以较小的块形式将内存使用量降到最低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 2013-10-24
    • 2019-11-19
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多