用途 本技能用于在 Umbraco 17/18 项目中实现自定义嵌入(oEmbed)提供程序。后台 Embed 对话框会把用户粘贴的 URL 交给 IOEmbedService,由首个正则匹配的已注册提供程序返回嵌入标记。提供程序是 C# 类,通过 composer 注册。
主要能力
- 介绍新增 oEmbed 提供程序的写法(基于 OEmbedProviderBase 的可派生类)。
- 说明提供程序的注册与排序规则:第一个匹配的提供程序生效。
- 说明正则规则:需锚定匹配,遇到不支持的 URL 返回 null。
- 覆盖常见任务:站点已有 oEmbed API、站点无 oEmbed API、修改或覆盖内置提供程序(如 YouTube nocookie 或自定义标记)、自定义提供程序被忽略或由错误提供程序应答、文档代码无法编译或无返回时的修正。
使用方式 技能以参考资产组织:先打开 references/embed-providers.md,再按其中对应任务的行打开所指向的资产;仅在需要未展示的 API 或用例时再打开其他资产或获取文档。 版本判断:从 .csproj 或 Directory.Packages.props 读取 Umbraco.Cms 版本;低于 17 则不适用,需明确说明;无项目则询问。 兼容性:17 与 18 的 IEmbedProvider 和 OEmbedProviderBase 相同(仅 GetMarkupAsync)。资产在 17.5.3 和 18.2.0 上编译无警告,运行时在 17.5.3 验证。17.7+ 与 18.2+ 在 OEmbedProviderBase 上增加 protected virtual HttpClient GetHttpClient()(可替换客户端,用于代理或测试),17.5.3 与 18.0/18.1 没有该方法。 技能提示的文档陷阱:官方文档 v17 示例无法编译;其 ApiEndpoint 会重复添加 ?url=;Append 无法覆盖匹配相同 URL 的内置提供程序。
适用场景 适用于基于 Umbraco 17/18 的站点集成第三方内容嵌入、为无 oEmbed API 的站点自建嵌入提供程序、调整内置提供程序行为或排查提供程序匹配问题。
限制与验证 所有资产在 dotnet 测试门禁(examples/oembed-providers/,Clean host)中离线运行:YouTube URL 渲染 nocookie 播放器(证明 Replace 覆盖了内置程序)、不支持的 URL 返回无效结果、自定义主机标记处理编码输入、oEmbed 模板构造只含一个 ?url= 的请求。评估使用 evals/evals.json,通过 umbraco-skill-evaluator 运行。资料未提供安装命令、收费与价格信息。