说明: ASP.NET 在请求中检测到包含潜在危险的数据,因为它可能包括 HTML 标记或脚本。该数据可能表示存在危及应用程序安全的尝试,如跨站点脚本攻击。如果此类型的输入适用于您的应用程序,则可包括明确允许的网页中的代码。
异常详细信息: System.Web.HttpRequestValidationException: 从客户端(Content="
sdfdddd
...")中检测到有潜在危险的 Request.Form 值。
字段NewContent的值HTML代码含有HTML 标记或脚本。该数据可能表示存在危及应用程序安全的尝试,如跨站点脚本攻击。
即使在Action中加了 [ValidateInput(false)]也不管用,原来是下面代码了引起的:
var urlReferrer = Request.Params["UrlReferrer"];
ViewBag.UrlReferrer = urlReferrer;
把上面两行代码注释掉是,就正常了。原来在MVC中使用了 Request.Params来获取参数值验证时对加 [ValidateInput(false)]是还够的,还要在配置文件Web.config中的结点httpRuntime加入requestValidationMode="2.0",例如:
</connectionString>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<httpRuntime targetFramework="4.0" requestvalidationMode="2.0"/>
如果是代码中没有Request.Params来获取参数值,只在Action方法加上 [ValidateInput(false)]就可以了。在使用aspx页面时可通过在 Page 指令或 配置节中设置 validateRequest="false" 禁用请求验证。但在MVC(Razor)中使用无效。只需要在页面所请求的Action上加入 ValidateInput(false)即可。
例如:
[ValidateInput(false)]
public ActionResult Add(){
.............
}
即可解决问题.