1
votes

I have an ASP.NET MVC Web API and I need to call it using Delphi 6. I am trying to use the Indy components (version 9.0.18), I am using the TIdHttp component.

I am using the REST methods, like POST to add, PUT to update and DELETE to delete the records. I got successfully adding, updating and getting my records, but I couldn't get successfully to call the DELETE method. It raises an error "HTTP/1.1 400 Bad Request".

I tried to debug the Web API, but it appers that the request didn't come, cause it doesn't stop in the breakpoint.

The Indy version that I am using doesn't have the method DELETE, so I tried to use the DoRequest method.

My code:

IdHTTP.DoRequest(hmDelete, 'http://localhost/myapp/api/user/1', nil, nil);

If I make the request using Fiddler it works, so my Web API is working well.

1
Sounds like you need to do some debugging. I'd use a tool like Wireshark to inspect the requests. What's your question for Stack Overflow? - Rob Kennedy
If I find a way to inspect the requests will help me to undertand the problem. I will try to use the Wireshark. But my question is how to make a DELETE request using Indy components. Does Anyone already do it? - Rodrigo Kiguti
The problem is that I need to use an old version on Delphi and Indy, and I can't update. I know newer versions has better support to make REST requests. - Rodrigo Kiguti
New Indy versions can be used with Delphi 6 (and 5) - mjn
You can use Wireshark or Fiddler to compare a working Delete request with the non-working to find the difference - mjn

1 Answers

2
votes

As an alternative to Indy, I suggest you use "Import Type Library..." from the Project menu, and select "Microsoft XML", the highest version available (I have versions 3 through 6 on the machine I'm currently on). Disable "Generate Component Wrapper", and then use the XMLHTTP component to make REST calls. E.g.:

uses ActiveX, MSXML2_TLB;

var
  r:XMLHTTP;
begin
  CoInitialize(nil);
  r:=CoXMLHTTP.Create;
  r.open('DELETE','http://localhost/myapp/api/user/1',false,'','');
  //r.setRequestHeader(...
  r.send(EmptyParam);
  if r.status=200 then