C#调用Teams Webhook发送AdaptiveCard返回400 Bad Request排查
Teams Webhook 推送消息返回无详情400错误排查指引
- 格式适配错误
Teams Webhook在请求格式校验失败时,默认不会返回详细错误信息,只会抛出通用的400 Bad Request响应。普通Teams传入式Webhook 不支持直接把原生AdaptiveCard JSON作为请求体发送,这类Webhook要求请求体必须为包装后的消息结构,需要将AdaptiveCard实例放置在attachments数组节点下,而非直接把AdaptiveCard内容作为请求根节点。你之前提到找不到attachment元素,本质就是缺失这层必要的包装结构。
符合要求的请求体结构参考:{ "type": "message", "attachments": [ { "contentType": "application/vnd.microsoft.card.adaptive", "content": { "type": "AdaptiveCard", "version": "1.4", "body": [ // 放置ColumnSet、Container等卡片元素内容 ] } } ] } - 请求头配置错误
代码中使用AdaptiveCard SDK自带的ContentType作为StringContent的媒体类型,会导致请求头不符合Webhook接收要求。正确配置是将请求的ContentType设为application/json,而非AdaptiveCard专属的媒体类型。 - 卡片结构合法性问题
你生成的第一份JSON根节点包含"title": "test"字段,该字段不属于AdaptiveCard schema的合法根字段,会直接触发请求校验失败。另外代码中指定使用1.2版本的AdaptiveSchemaVersion,但实际序列化生成的JSON版本为1.0,说明引用的AdaptiveCards SDK版本过老,生成的卡片结构和Webhook支持的schema不匹配,需要确认SDK生成的卡片版本是否在Webhook支持的范围内。 - Webhook连通性前置校验
先用最简请求测试Webhook本身是否可用,发送如下纯文本请求:
如果该请求同样返回400,说明问题出在Webhook配置层面(例如地址复制错误、Webhook被删除/禁用、租户传入式Webhook策略被限制),和卡片结构无关。{"text": "test connection"}
内容的提问来源于stack exchange,提问作者morleyc
相关产品推荐
相关产品推荐

