Обновление пользовательского поля через API

Я пытаюсь провести реверс-инжиниринг процесса обновления значения user_field.

Я сделал это, следуя инструкциям по адресу https://meta.discourse.org/t/reverse-engineer-the-discourse-api/20576: отредактировал тестового пользователя и зафиксировал, что происходило во вкладке Network в браузере.

Я вижу, что нужно выполнить запрос PUT по этому URL: https://example.com/u/my-username-here.json.

Некоторое замешательство вызвало то, что я не увидел JSON-полезную нагрузку, а вместо этого получил данные формы (form data). Полезная нагрузка выглядела так: user_fields%5B1%5D=some+dji%2C+some+Autel&user_fields%5B5%5D=%40UKDroneClub&user_fields%5B6%5D=%40iKiteFlyer&user_fields%5B8%5D=test&timezone=Europe%2FLondon&default_calendar=none_selected.

Мне нужно обновить только одно значение user_field.

Оно закодировано в URL как: user_fields%5B8%5D=test.

В расшифрованном виде это выглядит так: user_fields[8]=test.

(8 — это идентификатор user_field, который я хочу обновить)

Как мне преобразовать это значение из формата данных формы в JSON-полезную нагрузку, чтобы затем выполнить PUT? :thinking:

Не уверен, в чём именно проблема, но я могу обновлять раздел «Обо мне» в профиле пользователя через API-вызов, однако не могу обновить ни одно из user_fields.

Если я отслеживаю действия браузера при редактировании пользователя, то вижу, что отправляется следующий PUT-запрос:

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

Для выполнения PUT-запроса к API я использую следующий код:

' Добавить заголовки
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)

' Добавить параметры тела формы
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())

Каждый раз при выполнении API-запроса значение bio_raw успешно обновляется до текущей временной метки (в качестве теста).

Однако значение user_fields[8] по какой-то причине не обновляется вообще. Ошибок нет, просто ничего не происходит.

Я пробовал как URL-кодировать параметр как user_fields%5B8%5D, так и передавать его в обычном виде как user_fields[8], но ни один из вариантов не сработал.

Не упустил ли я что-то очевидное? :thinking:

ААААААА :man_facepalming:

Да, да, я упускал.

Это:

Предотвращает редактирование user_field, когда API-вызов выполняется пользователем.

Конечно же, так и есть :exploding_head:

Если я переработаю свой API-вызов и выполню его от имени system, всё будет работать отлично :roll_eyes: