You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Discord Bot连接Discord API时触发Newtonsoft.Json.JsonReaderException错误

解决Discord Bot连接时的Newtonsoft.Json.JsonReaderException问题

首先,这个错误的核心原因其实很直观:你看到的<字符是HTML标签的开头,说明Discord.Net在尝试解析Discord API的响应时,收到的不是预期的JSON数据,而是一段HTML(通常是错误页面,比如401未授权、网络拦截页面)。这就是为什么你没直接处理JSON却遇到了JSON解析错误——Discord.Net底层会自动处理API的请求和响应解析,出问题的是这个环节。

下面是一步步的排查和解决方法:

1. 优先检查Bot Token是否正确

这是最常见的原因:

  • 确保你复制的是Discord开发者门户中Bot页面的Token,而不是OAuth2页面的Client Secret,两者完全不同
  • 检查Token有没有多余的空格、换行或者遗漏字符,复制时尽量用右键复制按钮,避免手动选中出错

2. 排查网络或代理问题

如果你的网络有代理、防火墙或者VPN,可能会导致请求被拦截,返回了代理服务器的错误HTML页面:

  • 尝试关闭代理、防火墙,或者切换到其他网络(比如手机热点)重新测试
  • 确认你的网络可以正常访问Discord的API服务

3. 检查版本兼容性

你使用的.NET Core 2.2已经停止官方支持,Discord.Net 2.1.1和它的兼容性可能存在潜在问题:

  • 建议升级你的项目到.NET Core 3.1或更高版本(比如.NET 6/7这类LTS版本更稳定)
  • 同时可以尝试调整Discord.Net的版本,比如升级到2.4.x(和.NET Core 3.1兼容的稳定版本),或者确认当前版本的依赖是否正确安装

4. 增加日志和异常捕获,获取更多细节

你可以在代码里添加全局异常捕获,看看更完整的错误信息,帮助定位问题:
修改你的MainAsync方法如下:

public async Task MainAsync()
{
    try
    {
        Client = new DiscordSocketClient();
        Client.Log += Log;
        var token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        await Client.LoginAsync(TokenType.Bot, token);
        await Client.StartAsync();
        await Task.Delay(-1);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"=== 全局异常信息 ===");
        Console.WriteLine(ex.ToString());
        if (ex.InnerException != null)
        {
            Console.WriteLine($"\n=== 内部异常信息 ===");
            Console.WriteLine(ex.InnerException.ToString());
        }
    }
}

运行后,控制台会输出更完整的异常链,可能会显示API返回的具体错误内容。

5. 检查Discord开发者门户的Bot设置

  • 确认你的Bot已经被邀请到目标服务器,并且拥有足够的权限(至少需要Send Messages等基础权限)
  • 如果是新创建的Bot,检查是否在开发者门户的Bot页面开启了必要的Privileged Gateway Intents(比如Server Members Intent、Presence Intent),虽然Discord.Net 2.1.1可能还没强制要求,但部分场景下缺少会导致异常

内容的提问来源于stack exchange,提问作者Bouncer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:49:13