You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Teams Webhook发小消息返回Error 413,为何上限减半?

问题

根据微软官方文档,Teams频道Webhook消息的最大上限约为28KB,但发送远小于该大小的消息时,仍收到错误:Webhook message delivery failed with error: Microsoft Teams endpoint returned HTTP error 413 with ContextId ***。经测试发现,仅能发送内容大小不超过14000字节的请求。

简化后的代码如下:

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为默认客户端。请问遗漏了什么?为何上限恰好减半?

解决分析
  • 遗漏核心设置:请求编码与Content-Type
    默认情况下,StringContent使用UTF-16编码序列化字符串,UTF-16每个字符占2字节。而Teams文档中提到的28KB上限是针对UTF-8编码的内容,这就导致实际传输的字节数被翻倍计算——比如14000字符的UTF-16内容,对应传输字节数是28000左右,刚好触碰到Teams的28KB限制,这就是你测试时上限减半的原因。

    另外,代码中没有指定Content-Type为application/json,Teams Webhook要求接收JSON格式请求,缺失该头可能也会导致处理时的额外开销或校验问题。

  • 修复代码
    创建StringContent时显式指定UTF-8编码,并设置正确的Content-Type:

    private async Task SendTeamsNotification(string webhookUrl, string jsonTemplate) {
        var content = new StringContent(jsonTemplate, Encoding.UTF8, "application/json");
        var response = await _httpClient.PostAsync(webhookUrl, content);
    
        // 错误处理逻辑...
    }
    
  • 上限减半的本质原因
    完全是编码差异导致:UTF-16编码下每个字符占用2字节,Teams的28KB上限是基于UTF-8编码的内容大小。使用默认UTF-16时,实际传输字节数是UTF-8的2倍,所以能发送的最大内容规模就变成了官方上限的一半。

内容的提问来源于stack exchange,提问作者Robin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:33:17