![]() |
RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Ich möchte einem RESTRequest zwei Parameter zuweisen, bei dem die Schlüsselbezeichnungen identisch sind:
1. Beispiel:
Code:
Bei RESTRequest.Execute wird nur die 2. Datei übertragen. Hat also nicht geklappt!
RESTRequest.Params.AddItem('file','Test.pdf',TRESTRequestParameterKind.pkFILE);
RESTRequest.Params.AddItem('file','Test.json',TRESTRequestParameterKind.pkFILE); 2. Beispiel:
Code:
Bei RESTRequest.Execute werden zwar beide Dateien übertragen, die Schlüssel sind aber verschieden!
RESTRequest.Params.AddItem('file_1','Test.pdf',TRESTRequestParameterKind.pkFILE);
RESTRequest.Params.AddItem('file_2','Test.json',TRESTRequestParameterKind.pkFILE); Intern scheint Delphi(procedure MergeParam)darauf zu achten, dass die Schlüssel nicht doppelt vorkommen. Dennoch die Frage: Gibt es in Delphi eine Möglichkeit, zwei Parameter in einem RESTRequest mit denselben Schlüssel aufzunehmen? |
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Das ist sogar recht simpel, wenn auch nicht mit den vorhandenen Methoden:
Delphi-Quellcode:
Der class helper kann auch in einer eigenen Unit liegen, die bei Verwendung eingebunden wird. Und dann einfach so aufrufen:
type
TMultiParamRESTRequestParameterListHelper = class helper for TRESTRequestParameterList function AddMultiItem(const AName, AValue: string; AKind: TRESTRequestParameterKind; AOptions: TRESTRequestParameterOptions = []): TRESTRequestParameter; end; ... { TMultiParamRESTRequestParameterListHelper } function TMultiParamRESTRequestParameterListHelper.AddMultiItem(const AName, AValue: string; AKind: TRESTRequestParameterKind; AOptions: TRESTRequestParameterOptions): TRESTRequestParameter; begin Self.BeginUpdate; try Result := Self.Add as TRESTRequestParameter; Result.Name := AName; Result.Value := AValue; Result.Kind := AKind; Result.Options := AOptions; finally Self.EndUpdate; end; end;
Delphi-Quellcode:
RESTRequest.Params.AddMultiItem('file', 'Test.pdf', TRESTRequestParameterKind.pkFILE);
RESTRequest.Params.AddMultiItem('file', 'Test.json', TRESTRequestParameterKind.pkFILE); |
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Hallo Herr Jänicke!
Danke für den Tipp. Habe ich eingebunden. Allerdings wenn ich RESTRequest.Execute aufrufe, wird nur eine Datei im Request hochgeladen (wieder nur die 2. Datei). Ist das nicht zu erwarten, weil RESTRequest.Execute intern CreateUnionParameterList und MergeParam aufruft und hier wird auf identische Schlüssel hin überprüft. Oder habe ich da etwas nicht verstanden? |
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Zitat:
Mehrere gleichnamige Parameter sind leider auch nicht im Standard definiert, von daher ist die Implementierung auch nicht prinzipiell falsch. Es steht im Standard aber auch nicht, dass die Parameter unterschiedliche Namen haben müssen. Dann bleibt leider nur die ganze Unit zu kopieren und zu modifizieren. Denn ansonsten ginge es nur mit dreckigen Tricks, die man nicht verwenden sollte. |
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Hallo Herr Jänicke!
[QUOTE=jaenicke;1461716] Zitat:
Noch eine Anschlussfrage: Der Server schickt in seiner Antwort eine pdf-Datei mit. Die ergibt sich aus den oben erwähnten beiden Dateien. In "Postman" klicke ich einfach auf "Save Response". Ich habe nach einem Beispiel gesucht, wie ich das in Delphi mache. In der Hilfe (Handling an HTTP Response) steht nur Grundsätzliches. Haben Sie / Hat jemand hier für ein Beispiel? |
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Zitat:
Code:
procedure TfRestTest.RESTRequestAfterExecute(Sender: TCustomRESTRequest);
var msPdfContent: TMemorystream; begin msPdfContent:= TMemorystream.Create; try msPdfContent.WriteData(RESTResponse.RawBytes, length(RESTResponse.RawBytes)); msPdfContent.SaveToFile('Test_sig.pdf'); finally msPdfContent.Free; end; end; |
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
[QUOTE=Blo;1461720]Hallo Herr Jänicke!
Zitat:
beseitigen? Falls dem so ist wäre denke ich ein QP request angebracht, dass die HTTP Komponenten mehrere gleichnamige Parameter erlauben sollten, da manche REST APIs das so verlangen (im Report dann das benutzte API als Beispiel aufführen). Sonst kopieren wir anderen auch übermorgen noch Units und passen die manuell an... :-( Die sind dann bei jedem Update auf andere Änderungen des Originals abzuprüfen um diese dann übernehmen zu können :-( Grüße TurboMagic |
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Es wäre hier am sinnvollsten ein Supportticket aufzumachen und zu schreiben mit welchen Änderungen das lösbar ist. Dann ist die Chance am größten, dass da zeitnah etwas passiert. Denn letztlich ist das ja keine große Änderung und die implementierte Einschränkung auf einen gleichnamigen Parameter so nirgends in einem Standard festgelegt.
|
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Jein: ja, ein Supportticket ist ein direkterer Zugang zu EMBT, aber ob das dadurch schneller übernommen wird ist fraglich. Mit einem QP Report können wir jedenfalls den Status verfolgen und mittels Abstimmen anzeigen, dass wir das auch wollen.
Die geänderte Quellcode Datei kann man auch da anhängen. Andere können die dann dort auch direkt sehen, was beim Support Ticket nicht gegeben ist. Beides hat seine Vor- und Nachteile und auch ich möcjte diese Änderung schnellstmöglich mit aufgenommen haben. |
AW: RESTRequest: Zwei Parameter mit identischen Schlüssel hinzufügen
Ja, es ist sinnvoll beides zu machen. Ich habe das auch schon so gemacht, dass ich einen QP-Eintrag erstellt habe und dann im Supportticket darauf verwiesen habe.
Ich habe nun doch noch einen entsprechenden Eintrag in den Standard-Beschreibungen gefunden: ![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz