根据 MS 文档,我可以通过 Webhook 发送到 Teams 频道的消息的最大大小为 ~28KB(链接) 但即使对于小得多的消息,我也会收到以下错误:
Webhook message delivery failed with error: Microsoft Teams endpoint returned HTTP error 413 with ContextId ***
我玩了一下,发现我只能发送内容大小最大为 14.000 字节的请求。
这是我的代码的简化:
private async Task SendTeamsNotification(string webhookUrl, string jsonTemplate) {
var content = new StringContent(jsonformattedTemplate);
var response = await _httpClient.PostAsync(webhookUrl, content)
// Some error handling...
}
jsonTemplate
是自适应卡的json格式字符串。 _httpClient
是默认客户端。
我错过了什么?为什么限制正好减半?
我无法创建评论,但我认为这与将卡片发送到 Teams 时的数据编码有关。看起来微软正在检查实际的字节长度而不是它包含多少个字符。
不提供编码时,
StringContent
使用UTF-8来获取字节。例如,为此编码提供四个普通字符会产生四字节大小,但提供日语文本 テスト
(从 test
翻译)会产生九个字节大小。基本上所有非正常字符都包含多个字节(当通过支持它们的编码进行处理时)。
我还面临着通过传入的 webhook 将动态内容发送到 Teams 频道的任务,并且有同样的问题,因为我已经在 O365 的另一部分遇到了类似的问题。
组允许有最大长度为 1024 的描述,但看起来 Microsoft 也计算字节而不是字符,即使描述是发送到 Graph 的较大 JSON 主体的一部分。 1024 个字符的描述中至少有一个特殊字符将导致错误。我认为问题的实际根源是 Graph 调用以设置描述的后端服务。但这是另一个故事,不是本线程问题的一部分。