使用网络聊天频道时,我们在向Bot上传附件时遇到问题。 上传附件后,我们收到“抱歉,我的机器人代码出现问题”,在我们的日志中,我们看到以下异常:
发布收到的异常:远程服务器返回错误:(400)错误请求。 Microsoft.Rest.HttpOperationException:远程服务器返回错误:(400)错误请求。 在Microsoft.Bot.Connector.ErrorHandling.d__2`1.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)......
这是我们用于获取附件内容的代码:
private async Task StoreUserAttachments(IDialogContext context, IAwaitable<IEnumerable<Attachment>> attachments)
{
try
{
m_userAttachments = new List<UserAttachment>();
var httpClient = new HttpClient();
foreach (var attachment in await attachments)
{
PrivateTracer.Tracer.TraceInformation($"Got user attahcment with content type {attachment.ContentType} and name {attachment.Name}");
var attachmentBytes = await httpClient.GetByteArrayAsync(attachment.ContentUrl);
m_userAttachments.Add(new UserAttachment {Filename = attachment.Name, ContentsBase64 = Convert.ToBase64String(attachmentBytes)});
}
await PromptNextQuestion(context);
}
catch (Exception exception)
{
var message = $"Got exception {exception}";
PrivateTracer.Tracer.TraceError(message);
context.Done(message);
}
}
以下是调用此函数的代码
PromptDialog.Attachment(context, StoreUserAttachments, "Please upload your files now.");
这个try-catch没有捕获异常,它只是从网络聊天中抛出而不是在Bot模拟器中抛出,这使得调试变得更加困难。
任何想法是什么造成的?
编辑
我们缩小了问题范围:
只有在我们将附件保存到字段时才会发生错误请求异常(m_userAttachments)
当我们将附件传递给下一个方法而不是将它们保存在字段中时,我们得到以下异常:
发布收到的异常:响应状态代码不表示成功:500(内部服务器错误)。 System.Net.Http.HttpRequestException:响应状态代码不表示成功:500(内部服务器错误)。 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSucces ...