Meu httpclient tem nome de usuário e chave de API definidos nos cabeçalhos, e funciona para outras coisas, por exemplo, postar obter usuário por ID externo ou outras.
Preciso enviar api-key e api-username também no corpo.
Meus usuários estão logados por sso, quando desconecto o usuário da página de administrador no discourse, funciona.
Aqui está parte do código de como estou tentando chamá-lo
var formData = new FormUrlEncodedContent(new { new KeyValuePair<string, string>(“username_or_email”, user.user.username) }); var response = await _httpClient.PostAsync($“/admin/users/{user.user.id}/log_out”, formData); var content = await response.Content.ReadAsStringAsync();
A resposta retorna código 200, mas o conteúdo é uma página da web, não {Succes: “OK” }
O problema foi que minha configuração de desenvolvimento apontava para uma instância HTTP e não HTTPS do Discourse.
Quando mudei para o endpoint HTTPS, começou a funcionar.
Fiquei confuso porque alguns endpoints de API funcionavam via HTTP, mas este não.
Para futuros leitores, aqui está como eu desconecto usuários usando C#
var url = $"/admin/users/{user.user.id}/log_out";
using var formData = new MultipartFormDataContent{
{ new StringContent(_forumConfigModel.ApiKey), “api_key” },
{ new StringContent(_forumConfigModel.User), “api_username” }
};
var response = await _httpClient.PostAsync(url, formData);