You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ganss.Xss.HtmlSanitizer检测无效HTML并抛出异常?

实现Ganss.Xss.HtmlSanitizer遇无效HTML抛出异常的方法

要实现输入无效HTML时抛出异常,核心是利用HtmlSanitizer依赖的HtmlAgilityPack的解析错误检测,结合工具的事件或前置解析步骤来实现,具体有两种可行方案:

方案一:提前解析并检查HTML错误

直接用HtmlAgilityPack解析原始HTML,检查解析错误集合,若存在错误则抛出异常,再执行清理操作:

using Ganss.Xss;
using HtmlAgilityPack;

var html = @"invalid html";
var doc = new HtmlDocument();
// 关闭自动修复嵌套标签,保留原始解析错误
doc.OptionFixNestedTags = false;
doc.LoadHtml(html);

// 检查解析错误
if (doc.ParseErrors.Any())
{
    var errorDetails = string.Join("; ", doc.ParseErrors.Select(e => e.Reason));
    throw new InvalidOperationException($"无效HTML:{errorDetails}");
}

// 解析无错误时执行清理
var sanitizer = new HtmlSanitizer();
var sanitized = sanitizer.Sanitize(html, "https://www.example.com");

方案二:通过Sanitizer事件检查解析文档

利用HtmlSanitizer的PostProcessDocument事件,在清理完成后获取解析后的文档并检查错误:

using Ganss.Xss;

var html = @"invalid html";
var sanitizer = new HtmlSanitizer();
bool hasInvalidHtml = false;

sanitizer.PostProcessDocument += (s, e) =>
{
    // 检查解析文档的错误集合
    if (e.Document.ParseErrors.Any())
    {
        hasInvalidHtml = true;
    }
};

var sanitized = sanitizer.Sanitize(html, "https://www.example.com");

if (hasInvalidHtml)
{
    var errorDetails = string.Join("; ", sanitizer.Document.ParseErrors.Select(e => e.Reason));
    throw new InvalidOperationException($"无效HTML:{errorDetails}");
}

注意事项

  • HtmlAgilityPack的ParseErrors会记录解析过程中的语法错误(如未闭合标签、非法结构等),这是判断无效HTML的可靠依据。
  • 若仅对比原始HTML和清理后的内容,无法区分「合法但被清理的内容」和「无效HTML」,因此优先推荐上述两种方案。

内容的提问来源于stack exchange,提问作者LP13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:13