hmm: Error 422 suche unterschied zu funktionierender Query in der Chrome Konsole

Hi,

ich habe ein altes Programm das einen POST Request abschickt, welcher funktioniert und ich habe einen von mir geschriebenen Code der ebenfalls einen POST abschickt, welcher leider nicht funktioniert. Beides POST's sollen das gleiche tun.

Kann ich mit Hilfe der Google Netzwerk Konsole erkennen wo der Fehler liegt? Oder gibt es andere Wege, dass effizient herauszufinden? Für mich sieht Header, Request Payload, Response Headers etc. identisch aus.

Error 422 sollen Semantische Fehler sein, was genau sind den Semantische Fehler bei POST Requests? Eigendlich nur Falsche Parameter im Header und Body oder?

  1. Tach!

    ich habe ein altes Programm das einen POST Request abschickt, [...] Kann ich mit Hilfe der Google Netzwerk Konsole erkennen wo der Fehler liegt?

    Meinst du damit die Dev-Tools in Chrome? Wenn es ein Script ist, das im Chrome läuft, kannst du damit auch die Requests untersuchen. Wenn es ein separates Programm ist, dann nicht. Dann brauchst du ein Netzwerkanalyseprogramm, zum Beispiel Wireshark.

    Error 422 sollen Semantische Fehler sein, was genau sind den Semantische Fehler bei POST Requests?

    Da musst du den fragen, der die Gegenseite entwickelt hat. Allgemeine Texte, was der Fehler bedeutet, findest du ja problemlos mit einer einfachen Suche. Aber was konkret der Fall ist, weiß das Internet nicht. Es sei denn, die Gegenseite ist ein einigermaßen bekanntes Programm.

    dedlfix.

  2. Status 422 bezieht sich auf den gesendeten Content-Type (Enctype). Hier solltest Du ansetzen, also beim Client gucken ob die im POST gesendeten Daten dem gesendetem Content-Type entsprechen. Offensichtlich liegt genau hier das Problem, denn status 422 sagt aus daß der Server den Content-Type kennt. Ergo ist dann wohl bei der Verarbeitung ein Fehler aufgetreten.

    MFG

  3. hm... danke. der request header ist bei beiden Request identisch, aber beim response Header habe ich nur application/json, da müsste aber application/json utf-8 hin.

    1. hm... danke. der request header ist bei beiden Request identisch,

      Der Inhalt muss dem gesendeten Content-Type entsprechen! Was zu prüfen wäre.

      MFG

      1. mein header ist auf JSON eingestellt:

            var headers = new HttpHeaders({ 'content-type': 'application/json; charset=UTF-8',
              'authorization': "Bearer " + localStorage.getItem('token') });
            headers.append('Access-Control-Allow-Origin', '*');
        

        Allerdings bin ich mir nicht sicher, ob {version: eigenschaften.releaseVersion, comment: this.kommentar} im JSON Format verschickt wird. Woran sehe ich das?

        this.httpClient.post(url, {version: eigenschaften.releaseVersion, comment: this.kommentar},{headers: headers}).subscribe();
        
        1. Allerdings bin ich mir nicht sicher, ob {version: eigenschaften.releaseVersion, comment: this.kommentar} im JSON Format verschickt wird. Woran sehe ich das?

          Indem Du Dir anguckst was verschickt wird. Oder besser noch, vor dem Senden am Client validierst, was mit JSON kein Problem sein dürfte. Also ob z.B. JSON.parse() (oder Dein Parser) die Daten wiederherstellen kann.

          MFG

          1. ok, danke.

            schick ich beim content type: application/json; charset=UTF-8 ein JSON Objekt oder ein Json String? Ich teste das jetzt mal mit einem String.

            1. ok, danke.

              schick ich beim content type: application/json; charset=UTF-8 ein JSON Objekt oder ein Json String? Ich teste das jetzt mal mit einem String.

              HTTP Transport bekommt natürlich einen String, den erzeugt Deine httpClient-Library.

              Aber noch etwas: Auch wenn ein valide JSON dabei rauskommt, kann der Inhalt trotzdem falsch sein. Denn application/json beschreibt ja keine bestimmte Datenstrukur sondern eine Serialize-Algorithmus.

              Du musst also auch die Datenstruktur kennen die am Server erwartet wird.

              MFG

        2. Tach!

          mein header ist auf JSON eingestellt:

              var headers = new HttpHeaders({ 'content-type': 'application/json; charset=UTF-8',
                'authorization': "Bearer " + localStorage.getItem('token') });
              headers.append('Access-Control-Allow-Origin', '*');
          

          Dein headers.append() hat keine Wirkung. Keine der Methoden von HttpHeaders ändert die Daten. Sie geben einen Clone zurück, zuzüglich der Änderung. Das Ergebnis des Methodenaufrufs musst du noch headers zuweisen, wenn das im Request Berücksichtigung finden soll.

          Allerdings bin ich mir nicht sicher, ob {version: eigenschaften.releaseVersion, comment: this.kommentar} im JSON Format verschickt wird. Woran sehe ich das?

          In der Angular-Dokumentation. Oder indem du den Request untersuchst.

          this.httpClient.post(url, {version: eigenschaften.releaseVersion, comment: this.kommentar},{headers: headers}).subscribe();
          

          Das ist Overload #7 von HttpClient.post(), also "Constructs a POST request that interprets the body as a JSON object ..."

          dedlfix.

          1. Tach!

                headers.append('Access-Control-Allow-Origin', '*');
            

            Achja, das ist übrigens ein Header, der vom Server geschickt werden muss. Wenn du den als Client schickst, bringt das nichts. Die Zeile kannst du also komplett streichen.

            dedlfix.