Aktualisieren des benutzerdefinierten Felds über die API

Ich habe versucht, die Aktualisierung eines user_field-Wertes zu analysieren.

Ich bin dabei den Schritten in Reverse engineer the Discourse API gefolgt. Ich habe einen Testbenutzer bearbeitet und mir notiert, was im Netzwerk-Tab des Browsers geschah.

Ich sehe, dass ich zu dieser URL PUTen muss: https://example.com/u/my-username-here.json

Wo es ein wenig verwirrend wurde, war, dass ich keine JSON-Payload sah, sondern stattdessen Formular-Daten. Die Payload war: user_fields%5B1%5D=some+dji%2C+some+Autel\u0026user_fields%5B5%5D=%40UKDroneClub\u0026user_fields%5B6%5D=%40iKiteFlyer\u0026user_fields%5B8%5D=test\u0026timezone=Europe%2FLondon\u0026default_calendar=none_selected

Ich möchte nur einen user_field-Wert aktualisieren.

Es ist URL-kodiert: user_fields%5B8%5D=test

Und dekodiert liest es sich als: user_fields[8]=test

(8 = die ID des user_field, das ich aktualisieren möchte)

Wie kann ich diesen Formular-Datenwert in eine JSON-Payload umwandeln, damit ich ihn dann PUTen kann? :thinking:

2 „Gefällt mir“

Ich bin mir nicht sicher, was ich hier falsch mache, aber ich kann den Abschnitt „Über mich“ eines Benutzerprofils über einen API-Aufruf aktualisieren, aber ich kann keine der user_fields aktualisieren.

Wenn ich meinen Browser beim Bearbeiten eines Benutzers überwache, sehe ich, wie Folgendes PUT wird:

bio_raw=aboutmetest&user_fields%5B1%5D=some+dji%2C+some+Autel&user_fields%5B5%5D=%40UKDroneClub&user_fields%5B6%5D=%40iKiteFlyer&user_fields%5B8%5D=qwerty&timezone=Europe%2FLondon&default_calendar=none_selected

Ich verwende den folgenden Code, um meinen PUT-API-Aufruf zu tätigen:

' Füge einige Header hinzu
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)

' Füge einige Formular-Body-Parameter hinzu
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())

Jedes Mal, wenn ich den API-Aufruf mache, wird der Wert bio_raw wie erwartet auf den aktuellen Zeitstempel aktualisiert (als Test).

Aber aus irgendeinem Grund wird der Wert user_fields[8] überhaupt nicht aktualisiert. Keine Fehler, es wird einfach nicht aktualisiert.

Ich habe versucht, ihn sowohl URL-kodiert als user_fields%5B8%5D als auch als Klartext user_fields[8] zu verwenden, aber beides hat keine Auswirkung.

Übersehe ich hier etwas Offensichtliches? :thinking:

AARRGGHHH :man_facepalming:

Ja, ja, das tat ich.

Dies:

Verhindert die Bearbeitung des user_field, wenn der API-Aufruf vom Benutzer durchgeführt wird.

Natürlich tut es das :exploding_head:

Wenn ich meinen API-Aufruf überarbeite und ihn als system ausführe, funktioniert er einwandfrei :roll_eyes:

6 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.