C#使用SendGridMessage为动态模板插值传值未生效如何解决
解答
你的推测部分正确:通过SetTemplateData()传入匿名类型的写法,本身就是C# SDK对接SendGrid动态模板的标准实现,SDK会自动将匿名类型序列化为模板所需的JSON结构,这部分代码不需要修改。
变量未替换的问题基本由以下几个常见原因导致,按优先级排查即可:
- 占位符语法不符合要求
SendGrid动态模板基于Handlebars实现,变量占位符必须使用双大括号包裹,你当前模板中写的{memberName}、{dateofAppointment}这类单大括号格式无法被模板引擎识别,需要统一修改为{{memberName}}、{{dateOfAppointment}}格式。 - 键名大小写不匹配
SendGrid动态模板的变量匹配是严格大小写敏感的,你传入的属性名为dateOfAppointment(Of的O为大写),如果模板中写的是dateofAppointment(of全小写),会因为名称不匹配无法完成替换,必须保证模板占位符名称和传入的属性名完全一致。 - 模板类型选择错误
SetTemplateData()仅对ID以d-开头的动态交易模板生效。如果你创建的是旧版Legacy类型模板,需要调用AddSubstitution()方法逐个传入替换值,SetTemplateData()不会对这类模板生效,可登录SendGrid后台核对模板类型与ID格式。
快速验证方法
开启SendGrid C# SDK的请求日志,检查实际发出的API请求体中是否存在dynamic_template_data节点,且节点下包含你传入的memberName、dateOfAppointment等键值。如果请求体内数据完整,问题必然出在模板侧的配置或写法错误,和代码逻辑无关。
修正模板侧问题后,变量即可正常替换。
内容的提问来源于stack exchange,提问作者psiodrake
相关产品推荐
相关产品推荐

