Einzelnen Beitrag anzeigen

Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#140

AW: Delphi 11.3 schon da?

  Alt 4. Mär 2023, 10:05
Ja, so was in der Art hatte ich auch schon: https://quality.embarcadero.com/browse/RSP-40549

Allerdings konnte ich mir wie im Report beschrieben mit einem Workaround helfen. Keine Ahnung ob der bei dir auch funktioniert.
Hm, du hast in deinem Report angegeben, dass er sich auf 11.2 bezieht. Hast du dich da verklickt oder klappt das tatsächlich unter 11.2 nicht? Das wundert mich, denn unter 11.2 ist der Code zwar auch Schrott, aber er ist in einer Form Schrott, dass trotzdem eigentlich alle APIs, die ein JSON zurückgeben, funktionieren müssten, auch deine. Das, was ich in meinem Bugreport geschrieben habe, müsste auch bei dir zutreffen (klingt jetzt nach "mein Report ist besser als deiner!", ist aber nicht so gemeint ): Bei deinem Content-Type von "application/json; api-version=7.1-preview.3" liefern sowohl 11.2 als auch 11.3 als LMimeKind ein "Unknwon". Danach kommt in 11.2 ja folgende Code:

Delphi-Quellcode:
          if (FClient.FallbackCharsetEncoding <> '') and
             not SameText(REST_NO_FALLBACK_CHARSET, FClient.FallbackCharsetEncoding) then
          begin
            // Skip some obvious binary types
            if LMimeKind <> TMimeTypes.TKind.Binary then
            begin
              LEncoding := TEncoding.GetEncoding(FClient.FallbackCharsetEncoding);
              LContentIsString := True;
            end;
          end
          else
          begin
            // Even if no fallback, handle some obvious string types
            if LMimeKind = TMimeTypes.TKind.Text then
              LContentIsString := True;
          end;
Das heißt, wenn du nicht vorher in deinem Code das "FallbackCharset" geleert oder auf "raw" gesetzt hast, wirst du im ersten Teil der if-Abfrage landen und da das MimeKind nicht "Binary" ist, sollte dein Content gesetzt werden. So wie das da steht, ist das auch alles quatsch, weil, wenn ich nichts übersehe, ein tatsächlich gesetztes Encoding komplett ignoriert wird. Aber da die meisten APIs heutzutage wohl mit UTF8 arbeiten und ein JSON liefern, funktioniert es am Ende des Tages halt trotzdem.

In 11.3 aber nicht mehr, weil sie die Logik komplett umgekehrt haben. Nur dann, wenn der MimeType wirklich als Text erkannt wird, wird er auch wie bisher ausgewertet. Das finde ich ziemlich dämlich, denn jetzt verlassen sie sich auf ihre fest vorgegebene, endliche Aufzählung im Dictionary und dazu kommt eben das Problem mit dem aus mehreren Teilen bestehenden Content-Type, was sich jetzt eben bemerkbar macht. Hier ist der Punkt, der mich tatsächlich fassungslos macht: da wird an einer der zentralsten Stellen des ganzen REST-Frameworks eine Funktion massiv geändert und niemand testet das vernünftig? Das ist ja jetzt nicht irgendwas absurdes, sondern OData (wo das mit dem Content-Type regelmäßig vorkommt) ist weit verbreitet.

Merkwürdig finde ich aber tatsächlich immer noch, dass das bei dir auch unter 11.2 auftritt. Müsstest du vielleicht nochmal näher nachschauen.

Geändert von Bbommel ( 4. Mär 2023 um 10:08 Uhr)
  Mit Zitat antworten Zitat