Application/x-www-form-urlencoded
не является допустимым типом носителя для отправки JSON.Вы уверены, что сервер на самом деле не ожидает application/json
вместо этого?Должно быть.
Кроме того, более важная причина, по которой ваш запрос не работает, заключается в том, что метод TIdHTTP.Delete()
просто не позволяет отправлять тело сообщения, поэтому сервер вообще никогда не видит JSON.Внутренне Delete()
вызывает метод TIdCustomHTTP.DoRequest()
, передавая nil
в параметре ASource
, который заменяет ваше присвоение свойства TIdHTTP.Request.Source
.
Чтобы сделать то, что вы пытаетесь, вам придетсязвоните DoRequest()
напрямую, например:
// TIdCustomHTTP.DoRequest() is protected,
// so use an accessor class to reach it...
type
TIdHTTPAccess = class(TIdHTTP)
end;
...
Json := '{"request": {"t_obj": {"noObj": "0301X1018V001","user": "myUser"}}}';
req := TStringStream.Create(UTF8Encode(Json));
try
resp := TStringStream.Create('');
try
//IdHttp1.Request.Source := req;
//IdHttp1.Request.ContentType := 'Application/x-www-form-urlencoded';
IdHttp1.Request.ContentType := 'application/json';
//IdHttp1.Delete('{BASE URL from the insurance office}/Delete', resp);
TIdHTTPAccess(IdHttp1).DoRequest(Id_HTTPMethodDelete, '{BASE URL from the insurance office}/Delete', req, resp, []);
ShowMessage(resp.DataString);
finally
resp.Free;
end;
finally
req.Free;
end;