c# - 发布长内容会引发“抱歉,我的机器人代码有问题”
问题描述
我正在使用 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 字符串太长。
我怎么能以另一种方式发布它?
解决方案
我不知道您正在调用什么服务,或者没有您的参数的所有值来测试它。但这对于评论来说太长了。
试试这个而不是.ToArray()
尝试类似的东西
var image = Convert.ToBase64String(File.ReadAllBytes("FileName"));
您可能还想尝试将此设置为您正在形成的字符串之外的变量IMAGE
。像这样的事情我过去曾取得过成功,但我再次不知道您的服务正在做什么或期望什么。
var image = Convert.ToBase64String(File.ReadAllBytes(
"FileName"));
image64 = "data:image/png;base64," + image;
推荐阅读
- javascript - 节点 JS 部署
- node.js - Node.js:将 Cucumber JSON 结果发送到 Jira 的 Xray - jira-client-xray 给出 HTTP 405 错误
- r - limma:smooth.spline 中的错误(lambda,pi0,df = smooth.df):不允许输入中的缺失或无限值
- google-apps-script - 谷歌工作表脚本 - 复制并放置一个单元格值
- java - 咖啡因缓存:永远不会调用 write()
- linux-kernel - `ioctl` 读写 GPIO:无效参数
- masm - 我无法在 masm x86 中进行选择排序
- gitlab - 在 GitLab 中为节点项目创建 2 个管道
- ios - 在 Mac Catalyst 中访问 NSWindow
- google-app-maker - 需要一些帮助来分配答案到谷歌应用程序制造商表单