Discord添加公会成员401错误尽管显然有效访问令牌

我是Discord API的新手,我正在开发一个项目,需要能够以编程方式添加一个公会成员。 我已经学会了如何获取授权代码(带有identify和guilds.join范围),将其兑换为访问令牌,并获取用户的ID。 最后一步是使用访问代码和用户ID来添加公会。 此命令详述如下:

https://discordapp.com/developers/docs/resources/guild#add-guild-member

我似乎需要向此URL发送PUT请求:

https://discordapp.com/api/guilds/[GuildID]/members/[UserID]

但这导致了这种反应:

{“code”:0,“message”:“401:未经授权”}

我尝试在Authorization标头中包含访问令牌:

授权:持票人[编辑]

我还尝试在请求中添加JSON主体:

{ “的access_token”: “[删除]”}

两者都没有奏效。 不出所料,同时使用两者并没有奏效。

我想知道这是否是权限问题,但Discord确认我有guilds.join范围。 这是我在交换访问令牌的授权码时收到的JSON:

{“access_token”:“[Redacted]”,“token_type”:“Bearer”,“expires_in”:604800,“refresh_token”:“[Redacted]”,“scope”:“识别guilds.join”}

识别范围有效,因为我能够检索用户及其ID。 但是guilds.join似乎不起作用。

我在下面提供了一些测试代码。 我已经标记了“选项1”和“选项2”行,以表示我通常不会在同一请求中执行这两种访问代码方法。 但正如我之前提到的,我确实尝试了两种方法,但仍然有401错误。

using (WebClient client = new WebClient()) { client.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded"); client.Headers.Add(HttpRequestHeader.Authorization, "Bearer [Redacted]");//Option 1 string output = client.UploadString ( "https://discordapp.com/api/guilds/[GuildID]/members/[UserID]", WebRequestMethods.Http.Put, "{\"access_token\":\"[Redacted]\"}"//Option 2 ); } 

因为我想了解其工作方式的内在性,我宁愿知道如何使用普通的Web请求(例如HttpWebRequest和WebClient,而不是使用某些OAuth库)。

我正在回答我自己的问题,因为我可能已经想到这一点。 它在我执行以下操作时有效:

 using (WebClient client = new WebClient()) { client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); client.Headers.Add(HttpRequestHeader.Authorization, "Bot [Redacted]"); string output = client.UploadString ( "https://discordapp.com/api/guilds/[GuildID]/members/[UserID]", WebRequestMethods.Http.Put, "{\"access_token\":\"[Redacted]\"}" ); } 

请注意,我从“application / x-www-form-urlencoded”的内容类型更改为“application / json”。 我从使用授权标题“Bearer”改为“Bot”,我使用的是我的机器人令牌。 我使用与以前相同的访问令牌。 如果没有更好的解决方案,我打算接受这个答案。