c#-尽管显然有效的访问令牌,Discord Add Guild Member 401错误

我是Discord API的新手,我正在一个项目,该项目需要能够以编程方式添加行会成员.我已经学习了如何获取授权码(具有identity和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: Unauthorized”}

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

Authorization: Bearer [Redacted]

我也尝试过向请求添加JSON正文:

{“access_token”:”[Redacted]”}

两者都没有起作用.毫不奇怪,同时使用这两种方法都不起作用.

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

{“access_token”: “[Redacted]”, “token_type”: “Bearer”, “expires_in”: 604800, “refresh_token”: “[Redacted]”, “scope”: “identify 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”,并且使用了我的机器人的令牌.我正在使用与以前相同的访问令牌.如果没有更好的解决方案,我计划接受这个答案.

上一篇:使用SSIS脚本任务触发事件,执行T-SQL命令并运行SMO 第二部分


下一篇:Python学习笔记