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

C#中如何绑定含HTML标记的字符串?解决表单提交验证异常

解决ASP.NET MVC提交含HTML标记表单的请求验证错误

错误原因

ASP.NET默认开启请求验证机制,会拦截表单中包含HTML/XML标记的输入,防止XSS攻击,这就是你遇到HttpRequestValidationException的核心原因。

解决方案

1. 针对模型属性允许HTML(推荐方案)

在你的QuestionItem模型的Question属性上添加[AllowHtml]特性,精准放开单个属性的请求验证限制,安全性更高:

public class QuestionItem
{
    public int ID { get; set; }

    // 标记该属性允许接收HTML内容
    [AllowHtml]
    public string Question { get; set; }

    public bool IsDisplay { get; set; }
}

添加该特性后,提交包含HTML的Question值时,框架会跳过对该属性的验证,不会抛出异常。

2. 针对Action方法禁用全局请求验证(不推荐)

如果需要对整个Action的所有输入放开验证,可以在目标Action上添加[ValidateInput(false)]特性:

[HttpPost]
[ValidateInput(false)]
public ActionResult SaveQuestion(YourViewModel model)
{
    // 编写保存逻辑代码
    return RedirectToAction("QuestionList");
}

这种方式会关闭整个Action的请求验证,安全性较低,仅适用于特殊场景。

关于Unicode转义的可行性

用Unicode转义HTML标记(比如将<转为\u003C)确实可以绕过请求验证,但属于冗余方案:

  • 需要在前端用JavaScript手动转义HTML字符,提交后后端还要解码还原,增加了代码复杂度。
  • 相比直接通过框架特性放开验证,这种方式没有任何优势,反而容易引入额外的编码错误。

因此不推荐用Unicode转义解决该问题,直接使用上面的框架特性方案更简单可靠。

安全提醒

如果这些带HTML的内容来自用户输入(而非仅后台维护),建议使用HTML清理库(如HtmlSanitizer)过滤掉危险标签(比如<script>、<iframe>),避免XSS攻击风险,确保保存的HTML内容安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:57:34