AspnetCore.HtmlSanitizer全局配置问题:移除指定标签与属性无效
解决AspnetCore.HtmlSanitizer全局移除指定标签/属性的问题
你当前代码无效的原因是:HtmlSanitizerOptions 默认的 AllowedTags 和 AllowedAttributes 是不可变集合(ImmutableHashSet),直接调用 Remove() 不会修改原集合——这类集合的操作会返回一个新的集合实例,而不是改动自身。你需要把返回的新集合重新赋值给对应的属性,才能生效。
正确的全局配置方式
在 Startup.cs 的 ConfigureServices 中,按以下方式配置:
public void ConfigureServices(IServiceCollection services) { // 配置HtmlSanitizer选项:基于默认规则移除指定标签和属性 services.Configure<HtmlSanitizerOptions>(options => { // 从默认允许标签中移除<a>,返回新的不可变集合并赋值 options.AllowedTags = options.AllowedTags.Remove("a"); // 从默认允许属性中移除href,返回新的不可变集合并赋值 options.AllowedAttributes = options.AllowedAttributes.Remove("href"); }); // 注册HtmlSanitizer服务,注入配置好的选项 services.AddSingleton<IHtmlSanitizer>(provider => { var sanitizerOptions = provider.GetRequiredService<IOptions<HtmlSanitizerOptions>>().Value; return new HtmlSanitizer(sanitizerOptions); }); }
简化写法(可选)
如果不想单独写工厂方法,也可以用更简洁的方式注册服务:
services.AddSingleton<IHtmlSanitizer>(sp => new HtmlSanitizer(sp.GetRequiredService<IOptions<HtmlSanitizerOptions>>().Value));
这样配置后,整个应用中使用 IHtmlSanitizer 实例时,都会遵循你设定的规则:保留所有默认允许的标签/属性,仅移除<a>标签和href属性。
内容的提问来源于stack exchange,提问作者Shezi
相关产品推荐
相关产品推荐

