Что не так с библиотекой Microsoft Anti-XSS (которую вы упомянули)?
У них есть комплексная очистка HTML, которая фильтрует символы на основе белого списка, анализирует HTML, фильтрует узлы на основе белого списка, а затем восстанавливает (безопасный) HTML. Вы можете изменить белые списки (так как код открыт), но я не уверен, что вы захотите.
Использование тоже просто:
var sanitizedHtml = Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(inputHtml);