经常我们需要从客户端传一些HTML片段到后端,比如:博客发布一篇文章、发布留言等。
但是你可能会遇到错误,类似下图:
1. 其实错误中已经说明的很清楚了,并且告诉了解决方法:
从客户端(txtUEditor="<p>a</p>")中检测到有潜在危险的 Request.Form 值。
说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击。若要允许页面重写应用程序请求验证设置,请将 httpRuntime 配置节中的 requestValidationMode 特性设置为 requestValidationMode="2.0"。示例: <httpRuntime requestValidationMode="2.0" />。设置此值后,可通过在 Page 指令或 <pages> 配置节中设置 validateRequest="false" 禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkId=153133。
异常详细信息: System.Web.HttpRequestValidationException: 从客户端(txtUEditor="<p>a</p>")中检测到有潜在危险的 Request.Form 值。
2. 另一种方法是在web.config中的pages节中设置,如:
<system.web > <pages validateRequest="false" ></pages > </system.web >
但是这种方式并不好,太过暴力,因为它会使整个项目所有的页面都不会再验证提交的内容,安全性大大降低。
3. 推荐做法:
给Action加一个Attribute:[ValidateInput(false)],这样只会让该页面不验证提交的内容,而不会影响到其他页面。
[HttpPost] [ValidateInput(false)] public ActionResult Publish(FormCollection form) { return View(); }
我使用的是.Net 4.0、MVC 4。
本文章由创风网原创,转载请注明出处:http://www.windite.com/article/details/qh24v42