首页 > 解决方案 > 发布长内容会引发“抱歉,我的机器人代码有问题”

问题描述

我正在使用 BotFramework 在 PNG 图像上绘制字符串。然后我将它从内存中的字节数组转换为 base64 字符串。我将 base64 字符串发布到服务并获得正确的响应。一切正常,但我在处理后收到“抱歉,我的机器人代码有问题”消息。

case 5:
{
    try
    {
        ...
        graphics.DrawString(text, fonti, brush, drawRect, stringFormat);

        using (MemoryStream m = new MemoryStream())
        {
            image.Save(m, image.RawFormat);
            // I've tried changing this line to String or StringBuilder but
            // nothing changed              
            IMAGE = $"data:image/png;base64,{Convert.ToBase64String(m.ToArray())}"; 

            m.Close();
        }
    }
    catch { await context.PostAsync("ERR1"); }

    string json = null;
    try
    {
        string FormStuff = string.Format($"somecontent");
        StringContent content = new StringContent(
                                      FormStuff,
                                      Encoding.UTF8,
                                      "application/x-www-form-urlencoded");

        string url = string.Format("http://www.example.com/");
        var response = await client.PostAsync(url, content);
        json = (await response.Content.ReadAsStringAsync()).ToString();
    }
    catch { await context.PostAsync("ERR2"); }
    ...
}

break;

IMAGE变量是一个字符串。

每当我删除或更改Convert.ToBase64String()时,问题就消失了,但是我无法按我的意愿使用该服务,并且该过程被破坏了。

这里唯一的问题是抛出异常并显示给最终用户。

抱歉,我的机器人代码有问题

编辑:我发现如果我的帖子请求中的内容太长,我会收到错误消息。我试过使用FormUrlEncodedContent,但它抛出了这个:

无效的 URI:Uri 字符串太长。

我怎么能以另一种方式发布它?

标签: c#stringimagebase64botframework

解决方案


我不知道您正在调用什么服务,或者没有您的参数的所有值来测试它。但这对于评论来说太长了。

试试这个而不是.ToArray() 尝试类似的东西

 var image = Convert.ToBase64String(File.ReadAllBytes("FileName"));

您可能还想尝试将此设置为您正在形成的字符串之外的变量IMAGE。像这样的事情我过去曾取得过成功,但我再次不知道您的服务正在做什么或期望什么。

   var image = Convert.ToBase64String(File.ReadAllBytes(
        "FileName"));

    image64 = "data:image/png;base64," + image;

推荐阅读