.NET Core向Hygraph API提交Markdown富文本报错,求解决方案
解决Hygraph富文本字段提交错误的方法
错误原因
你收到的报错提示说明,Hygraph的RichText字段要求传入包含原始富文本值的对象数组,而你当前提交的markdown格式对象不符合这个要求。Hygraph的RichText输入不支持直接传递Markdown字符串,需要转换为它指定的Raw结构。
解决方案
方案1:直接构造符合要求的Raw富文本结构
如果你的富文本内容比较简单,可以手动构造Hygraph要求的Raw格式数组:
修改变量部分代码:
Variables = new { data = new { title, description, isFeatured, content = new { raw = new[] { new { type = "paragraph", children = new[] { new { text = content } // content为你的文本内容 } } } } } }
方案2:将Markdown转换为Hygraph Raw格式
如果需要处理复杂的Markdown内容,可使用Markdig解析库将Markdown转换为AST,再映射为Hygraph的RichText节点结构:
- 安装
Markdig包:
Install-Package Markdig
- 编写转换方法:
using Markdig.Syntax; public static object[] ConvertMarkdownToHygraphRaw(string markdown) { var document = Markdig.Markdown.Parse(markdown); var rawNodes = new List<object>(); foreach (var block in document) { // 处理段落 if (block is ParagraphBlock paragraph) { var children = new List<object>(); foreach (var inline in paragraph.Inline) { if (inline is Markdig.Syntax.Inlines.LiteralInline literal) { children.Add(new { text = literal.Content.ToString() }); } // 处理加粗文本 else if (inline is Markdig.Syntax.Inlines.BoldInline bold) { children.Add(new { text = bold.FirstChild.ToString(), bold = true }); } } rawNodes.Add(new { type = "paragraph", children = children.ToArray() }); } // 处理标题 else if (block is HeadingBlock heading) { rawNodes.Add(new { type = $"heading-{heading.Level}", children = new[] { new { text = heading.Inline.ToString() } } }); } // 可扩展处理列表、引用、图片等其他Markdown元素 } return rawNodes.ToArray(); }
- 在mutation代码中调用转换方法:
Variables = new { data = new { title, description, isFeatured, content = new { raw = ConvertMarkdownToHygraphRaw(content) } } }
关键说明
- Hygraph的RichText字段
raw属性必须是对象数组,每个对象代表一个富文本块(段落、标题等),包含type和children属性,children是带样式的文本对象数组。 - 若需支持更多Markdown语法(斜体、链接等),需在转换方法中扩展对应逻辑,映射为Hygraph支持的节点类型。
内容的提问来源于stack exchange,提问作者Rasik
相关产品推荐
相关产品推荐

