用途 该技能帮助在 Umbraco 16.1+ 项目中实现自定义 404 和 500 错误页面,覆盖官方教程中的三种场景:404、500 以及 Boot Failed(启动失败)。它不处理维护页面(升级期间显示),维护页面属于另一个独立的 umbraco-custom-maintenance-page 技能。
404 的两种方案 方案 A——内容查找器(Content finder,默认)。使用一个 IContentLastChanceFinder 加 composer(本地资产),支持按域名进行多站点解析(通过 request.Domain 解析根节点),无需按环境配置,按 Document Type 别名解析。方案基于官方文档“高级”示例的定制改进。 方案 B——基于配置。无需自定义 C#,由 Umbraco 内置的 ContentFinderByConfigured404 完成工作;仅按区域性(per-culture)解析,不支持按域名多站点;需要按环境在配置中填写 404 页面 GUID。其 Document Type 与模板以 assets/error-pages-package.xml 与 assets/errorPage404.cshtml 形式提供,可作为包安装或按规格手工搭建。方案 B 是官方文档推荐的方法。 默认选择 A。当团队希望零自定义 C# 且不需要按域名的多站点解析时,提供 B。两种方案都需要一个已发布的内容节点,可优先使用 Umbraco Developer MCP 完成这些步骤,否则手动引导用户通过后台操作。切勿同时实现两种方案:A 的 SetContentLastChanceFinder 为 AddUnique<IContentLastChanceFinder, T>(),会替换掉 Umbraco 自带的 ContentFinderByConfigured404(即 B 的实现),注册 A 会静默禁用 B。选择前应询问用户:是否需要按域名多站点?是否接受项目中增加一个小型 C# 文件?然后阅读对应参考文档并遵循。
500 错误 500 只有一种方案:未处理异常会绕过 Umbraco 的路由管线,因此只有普通的 MVC 控制器可行,详见 500-error-controller.md,两种 404 方案共用该控制器。
Boot Failed 错误 若还需处理启动失败(空白屏幕 / 500.30 / 502.5),有一种已记录的方法,无需代码或后台:添加静态文件 wwwroot/config/errors/BootFailed.html 并写入自定义标记,同时确保 appsettings.json 中 Umbraco:CMS:Hosting:Debug 为 false(只有关闭调试时该页面才会显示)。注意:若应用在 ASP.NET Core 管线初始化前崩溃,只有 Web 服务器(IIS/NGINX/Apache)能提供回退页面,建议在其中配置以实现完整覆盖。设置 500 页面时应主动提供此建议。
版本兼容 面向 Umbraco 16.1+(16.0 存在 404 处理回归问题,已在 16.1 修复,见教程警告)。
文档参考 Implement Custom Error Pages——方案 B 步骤与代码片段的权威来源,也是方案 A 与 500 控制器的底层参考;Custom Routing (IContentLastChanceFinder)。
适用场景与限制 适用于需要在 Umbraco 16.1+ 中配置错误页面的开发场景,尤其是多站点站点。限制包括:版本需 16.1+;404 两种方案不可同时使用;500 只能通过 MVC 控制器实现;Boot Failed 页面仅在调试关闭时显示,且管线初始化前的崩溃需由 Web 服务器处理。