【发布时间】:2015-03-06 12:59:10
【问题描述】:
Indy 的 TIdHttp 类具有 - 在最近的版本中 - 一个 Delete() 例程。但由于某种原因,这是一个过程,而不是一个函数。 Put()、Get()等都是返回响应体内容的函数。作为字符串或将其传递给TStream。这对于Delete() 是不可能的,这与DELETE 的定义相矛盾:
如果响应包含描述状态的实体,则成功响应应该为 200(OK),如果尚未执行该操作,则为 202(已接受),如果该操作已执行但响应为 204(无内容)不包括实体。
然后我尝试使用GetResponse(),但它只是优雅地关闭了我的连接,而不填写响应。
那么如何从 DELETE 响应中读取响应正文的内容?
【问题讨论】:
-
TIdHttp.ResponseText属性怎么样?无论如何,您希望在响应文本中找到什么? (除了测试ResponseCode) -
TIdHttp.ResponseText显然不是我想的那样。它与ResponseCode密切相关,因此在 200 响应中,TIdHttp.ResponseText包含“HTTP/1.1 200 OK”,而不是实际的响应正文。目前,我的解决方法可以在没有数据的情况下工作,但它只是返回它删除的项目的 ID,所以我可以验证它删除了正确的项目。 -
我从未使用过
DELETE方法,但我想您可以在响应标头中返回该ID。另外,我假设您控制服务器,但我不太确定您为什么首先需要使用DELETE方法。为什么不使用GET或POST并在请求参数中指明要删除哪个资源? -
因为这是一个 RESTful API,因此使用 DELETE 方法更有意义。 HTTP 方法存在并且是已知标准,为什么不使用它们?