Как разместить данные с ContentType 'multipart / form-data' в Delphi REST? - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь отправить запрос в REST API, используя multipart/form-data в качестве типа контента.

Я всегда получаю «HTTP / 1.1 500 Internal Error» в качестве ответа.

Я попытался отправить запросы методам, которые требуют application/x-www-form-urlencoded, и все же имел успех.

Как мне получить успешный ответ от моего API, используя multipart/form-data?

Вот мой код:

procedure TForm10.Button1Click(Sender: TObject);
var
  RESTClient1: TRESTClient;
  RESTRequest1: TRESTRequest;
  strImageJSON : string;
  Input: TIdMultipartFormDataStream;
begin
  Input := TIdMultipartFormDataStream.Create;
  Input.Clear;
  Input.AddFormField('Email', 'tugba.xx@allianz.com.tr');
  Input.AddFormField('Password', 'xxxx');
  RESTClient1 := TRESTClient.Create('http://192.168.1.172:81/');
  RESTRequest1 := TRESTRequest.Create(nil);
  RESTRequest1.Method := TRESTRequestMethod.rmPOST;
  RESTRequest1.Resource := 'api/Mobile/MobileLoginControl';
  RESTRequest1.AddBody(Input,TRESTContentType.ctMULTIPART_FORM_DATA);
  RESTRequest1.Client := RESTClient1;
  RESTRequest1.Execute;
  strImageJSON := RESTRequest1.Response.Content;
end;

1 Ответ

1 голос
/ 14 октября 2019

REST-компонент Embarcadero имеет собственные встроенные возможности multipart/form-data с помощью метода TRESTRequest.AddParameter():

procedure TForm10.Button1Click(Sender: TObject);
var
  RESTClient1: TRESTClient;
  RESTRequest1: TRESTRequest;
  strImageJSON : string;
begin
  RESTClient1 := TRESTClient.Create('http://192.168.1.172:81/');
  try
    RESTRequest1 := TRESTRequest.Create(nil);
    try
      RESTRequest1.Method := TRESTRequestMethod.rmPOST;
      RESTRequest1.Resource := 'api/Mobile/MobileLoginControl';
      RESTRequest1.AddParameter('Email', 'tugba.xx@allianz.com.tr', TRESTRequestParameterKind.pkREQUESTBODY);
      RESTRequest1.AddParameter('Password', 'xxxx', TRESTRequestParameterKind.pkREQUESTBODY);
      RESTRequest1.Client := RESTClient1;
      RESTRequest1.Execute;
      strImageJSON := RESTRequest1.Response.Content;
    finally
      RESTRequest1.Free;
    end;
  finally
    RESTClient1.Free;
  end;
end;

Вам не нужно использовать Indy's TIdMultiPartFormDataStream,особенно если вы не используете Indy's TIdHTTP.

...