在Delphi 7中处理TIdHTTPServer中的PUT和DELETE请求

时间:2014-06-06 09:15:12

标签: delphi rest delphi-7 indy-9

是否可以在TIdHTTPServer(Indy 9,Delphi 7)中处理PUT和DELETE请求?

我尝试过OnCommandGet,但它只处理GET和POST请求。

我也尝试过OnCommandOther事件。它处理PUT和DELETE方法,但我无法访问发送的数据。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

可能吗?是。但是,Indy 9中的TIdHTTPServer仅解析HEADGETPOST个请求,并且仅在分配OnCommandGet事件时才会解析。如果未分配OnCommandGet事件,或收到其他请求,则TIdHTTPServer 根本不会解析请求(第一行除外,以确定请求类型) ,并触发OnCommandOther事件。如您所知,该事件中没有提供TIdHTTPRequestInfoTIdHTTPResponseInfo参数,因此您必须手动自行阅读并解析整个请求 ,并自行发送适当的回复,使用AThread.Connection根据需要执行套接字I / O.请阅读RFC 2616以获取HTTP规范。

在Indy 10中更改了这一点,其中TIdHTTPServer DOES 为您处理所有解析,回复和套接字I / O以及所有OnCommand...个事件有TIdHTTPRequestInfoTIdHTTPResponseInfo个参数。

在将来的版本中(很可能在Indy 11之前),我们会针对各个请求(OnCommand...OnCommandPut等)添加新的OnCommandDelete个事件,因此他们不会这样做。所有人都必须通过OnCommandGetOnCommandOther进行投放。

答案 1 :(得分:0)

在 Indy 10.6.2.0 和 Delphi 10.4.2 中,如果已分配 HTTP“DELETE”命令也不会触发 OnCommandGet 事件。我只能使用 OnCommandOther 事件拦截 HTTP“DELETE”。