当前位置: 首页 > 知识库问答 >
问题:

如何修复“收到的消息意外或格式错误”

魏安宁
2023-03-14

我试图解决这个问题已经有一段时间了,但我所尝试的一切都是无用的。我尝试了HttpClientHandler,但仍然得到了错误!

错误消息:

无法建立SSL连接,请参阅内部异常

身份验证失败,请参阅内部异常

收到的消息意外或格式不正确

[Command("stats")] 
public async Task Profileosu([Remainder]string username = null)
{
    try
    {
        clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };

        HttpClient client = new HttpClient(clientHandler,disposeHandler: true);
        List<Player> player = new List<Player>();
        List<string> lines = File.ReadAllLines(path, encoding: Encoding.UTF8).ToList();
        string id = "";
        foreach (var line in lines)
        {
            string[] readed = line.Split(",");

            Player newPlayer = new Player();
            newPlayer.id = readed[0];
            newPlayer.osuname = readed[1];

            player.Add(newPlayer);
        }

        if (username is null)
        {
            id = Context.User.Id.ToString();
            username = Context.User.Username;
        }
        else if (Context.Message.MentionedUsers.Count > 0)
        {
            username = Context.Message.MentionedUsers.First().Username;
            id = Context.Message.MentionedUsers.First().Id.ToString();
        }
        for (int i = 0; i < player.Count(); i++)
        {
            if (player[i].id == id)
            {
                username = player[i].osuname;
            }
        }

        string url = $"https://osu.ppy.sh/api/get_user?k={k}&u={username}";
        string osuProf = await client.GetStringAsync(url);
        dynamic osuProfile = JsonConvert.DeserializeObject<dynamic>(value: osuProf);
        string pp_raw = osuProfile[0]["pp_raw"];
        string country = osuProfile[0]["country"];
        string user_id = osuProfile[0]["user_id"];
        string joinDate = osuProfile[0]["join_date"];
        string rank = osuProfile[0]["pp_rank"];
        string countryRank = osuProfile[0]["pp_country_rank"];
        string accuracy = osuProfile[0]["accuracy"];
        string playcount = osuProfile[0]["playcount"];
        string userName = osuProfile[0]["username"];



        embed.WithThumbnailUrl($"https://a.ppy.sh/{user_id}");
        embed.WithAuthor($"{username} #{rank}, {pp_raw}PP", Context.Guild.CurrentUser.GetAvatarUrl(), $"https://osu.ppy.sh/users/{user_id}");
        embed.WithDescription($"Join date:{joinDate}\nCountry:{country} #{countryRank}\n");
        embed.WithFooter($"Accuray:{double.Parse(accuracy):F2}%\t\tPlaycount:{playcount}");
        embed.WithColor(154, 255, 0);

        await ReplyAsync($"", false, embed.Build());
    }
    catch (Exception ex)
    {
        embed.WithAuthor("An error occurred");
        embed.WithDescription("This player doesn't exist! Please check the username and try again!");
        embed.WithColor(255, 0, 0);
        await ReplyAsync($"", false, embed.Build());
        Console.WriteLine(ex.Message);
        if (ex.InnerException != null)
        {
            Console.WriteLine(ex.InnerException.Message);
        }
        if (ex.InnerException.InnerException.Message != null)
        {
            Console.WriteLine(ex.InnerException.InnerException.Message);
        }    
    }
}

我从零开始学习c#,而且我对c#语言非常熟悉,所以请解释一下问题所在。

共有1个答案

白君之
2023-03-14

这很可能是由于您定义和使用的clientHandler造成的。

对于与OSU API的通信,您也不需要这个。所以,你可以继续让HttpClient为你处理这个。

所以代替:

clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };

HttpClient client = new HttpClient(clientHandler,disposeHandler: true);

您可以定义HttpClient如下:

HttpClient client = new HttpClient();

由于您现在不再定义disposeHandler,因此最好在您的try catch中添加Finally。

或者使用将应用到HttpClient

using (var client = new HttpClient())
{
    string url = $"https://osu.ppy.sh/api/get_user?k={Key}&u=d3ullist";
    string osuProf = await client.GetStringAsync(url);
    dynamic osuProfile = JsonConvert.DeserializeObject<dynamic>(value: osuProf);
}

这将以动态对象结束,正如您之前所期望的那样。

 类似资料:
  • 我使用的是PushSharp的2.1.2版本。该应用程序是。NET 4.5.1(虽然我也尝试过定位。NET 4.5和.网4) 我正在尝试通过沙箱Apple APNS发送推送消息,但没有成功。 我正在使用Ray Wenderlich的演练中提供的PHP脚本成功地发送消息,该脚本使用与我的PushSharp应用程序相同的证书并发送到相同的设备ID。 我已经通过从钥匙链导出完整的证书作为p12进行了测试

  • 我正在尝试连接到需要配置双向SSL的API。我有我在postman中配置的证书和私钥,如下图所示。 这在Postman中工作得很好,但当我尝试使用HttpClient在C#中实现它时,SSL失败了。我得到的错误是“收到的消息是意外的或格式不正确的。”。我相信这与不正确的配置有关。 我引用了这篇StackOverflow文章来实现我的代码:将私钥与中的X509Certificate2类相关联。网 以

  • 我试图连接到Kafka,从C#client启用TLS,在调用。不幸的是,到目前为止,互联网上的帖子都没有帮助我解决这个问题。你知道会出什么问题吗? 下面是我用来启动连接的最小样本C#代码

  • 我使用Windows 10, Python 3.7.6.使用以下软件包: 我使用的MySQL数据库具有以下设置。该数据库是使用我公司内的IT云数据服务创建的。我下载了SSL证书并将它们放在我的django项目中。 现在,当我键入,我可以连接到数据库,一切正常。我可以看到DB支持SSL。 但是,当我键入python manage时。py runserver要启动服务器,我会遇到以下异常,我不知道如何

  • 问题内容: 我们有一个使用AJAX的Sharepoint解决方案。触发此操作的按钮在更新面板中。 我们要做的一件事是生成MS Word文档,然后在客户端上打开该文档,以便可以打印它。 将文档发送到客户端的代码如下所示: 我们得到的错误是: 我们可以先将文档保存在Sharepoint中,然后再从Sharepoint中打开它,但是我们不希望这样做。 问题答案: 导致该代码执行的动作必须是回发事件,而不

  • 我有一个。NET Core 3.1 C#应用程序,该应用程序通过HTTPS调用API(并将其公钥作为获取令牌的一部分,因为该证书稍后将用于解密单独发送回的信息)。在我们几乎所有的机器上,它都在工作,但是在一台Windows 8.1机器上,当我们尝试初始连接身份验证令牌时,我们会遇到以下一系列异常: 异常是从,因此我怀疑这是在HTTPS级别发生的,我们的证书内容在这里并不真正相关。 我们获取令牌的代