MVC C# 如何解决前端文本框输入HTML标签提交保存报错问题
解决方案
根因说明
你遇到的报错是ASP.NET框架默认的请求验证机制导致的:为了防范XSS跨站脚本攻击,ASP.NET默认会拦截所有包含HTML、JS代码的提交请求,直接抛出异常阻止请求进入业务逻辑。你直接往数据库录入HTML内容可以正常渲染,就是因为跳过了前端提交时的请求验证环节。
可用解决方案(按安全性从高到低排序)
1. 仅对指定模型字段开放HTML提交权限(最推荐)
在你接收表单数据的模型类中,给存储HTML内容的属性添加[AllowHtml]特性即可,框架只会对该字段放行HTML内容,其余字段依然保留默认的安全验证规则,风险可控。
示例代码:
// ASP.NET MVC 版本引用 using System.Web.Mvc; // 若使用ASP.NET Core则引用 using Microsoft.AspNetCore.Mvc; public class ContentFormModel { // 其余字段保持默认验证逻辑 public int Id { get; set; } public string Title { get; set; } // 仅给存储HTML内容的字段添加允许HTML特性 [AllowHtml] public string HtmlContent { get; set; } }
2. 对指定处理请求的Action禁用请求验证
如果不想修改模型结构,可以直接在处理提交请求的Action方法上添加关闭验证的特性:
- ASP.NET MVC 5及更早版本:添加
[ValidateInput(false)]特性 - ASP.NET Core:该版本已废弃全局请求验证机制,若遇到拦截优先检查是否是第三方验证组件的限制,直接给对应字段加
[AllowHtml]即可解决
3. 前端转义+后端解码(无需修改后端验证规则)
如果你不想调整后端的安全验证配置,可以在前端提交前对HTML内容做转义处理,比如把<替换为<、>替换为>,后端接收到转义后的内容后先解码再存入数据库即可,完全不会触发请求验证。
安全提示
允许提交HTML内容会带来XSS攻击风险,无论采用哪种方案,都建议你在后端增加HTML内容过滤逻辑,移除
<script>、<iframe>、onclick等危险标签和属性,避免用户提交恶意脚本造成安全问题。
内容的提问来源于stack exchange,提问作者Unexpected_error
相关产品推荐
相关产品推荐

