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
相关产品推荐
相关产品推荐

