当前位置:首页 > 教程 > .NET MVC从客户端中检测到有潜在危险的 Request.Form 值 的解决方法

.NET MVC从客户端中检测到有潜在危险的 Request.Form 值 的解决方法

从客户端*中检测到有潜在危险的*值解决方案
当制作网页的时候,提交的数据有特殊字符或者是提交富文本编辑器数据的时候,经常会遇到这样的错误:


[HttpRequestValidationException (0x80004005): 从客户端...中检测到有潜在危险的 Request.Form 值。]
System.Web.HttpRequest.ValidateString(String s, String valueName, String collectionName)

或者类似:


从客户端…中检测到有潜在危险的Request.Form 值。

或者是:


从客户端中检测到有潜在危险的Request.QueryString值

出现这个错误的原因基本上都是是在传值字符串中有非法字符“<”,'&'之类的。.NET 为了安全,默认是会检查传递的字符串值的。既然知道了问题的关键所在,那么对症下药就对了。

针对“从客户端…中检测到有潜在危险的数据值”的解决方法

根据上面的分析是.NET为了安全检测了传递字符串的值中是否包含非法字符,所以对症下药只要屏蔽.NET / .NET MVC的检查就可以了,方法有两种。

一、设置全局

在web.config中的pages节中配置validateRequest=”false”,如:

1
2
3
<system.web >
<pages validateRequest="false" ></pages > 
</system.web >

但这样,整个项目中的所有Form请求都不再验证提交内容的安全性,我本人不提倡这种做法。

二、单个页面设置(推荐)

我们在用Asp.net 开发 Web Form页面时,通常要提交包含Html内容的数据给后台程序代码处理时,会为页面设置 ValidateRequest=”false” 属性,设置后,讨厌的 “从客户端 … 中检测到有潜在危险的 Request.Form 值”的错误就会被屏蔽掉了。

如果你使用的是.NET MVC开发,那么也很简单,只需要在要处理的Action中添加属性[ValidateInput(false)]即可,类似以下:

1
[ValidateInput(false)]public ActionResult Index(string value){}

但是如果你使用的是MVC 3.0甚至更低版本,那么你会发现做了以上的设置后还是无效。这是因为你还需要在web.config中做以下设置:

1
2
3
<system.web >
<httpRuntime requestValidationMode="2.0" / >
</system.web >

PS:如果你遇到MVC.NET解决validateRequest设置为false不起作用,看看是不是因为这个原因,在MVC项目中,Views文件夹下与主项目下,都会有一个web.config文件。Views下的web.config文件只对Views文件夹下面的文件有效。如果你要处理的页面不在Views下面,那么一定要设置在主项目下的web.config中才有用。

所以需要注意的是如果取消了ValidateRequest验证,那么就会丢失安全性,所以在不得已的情况下不要使用,即便要使用也不能使用全局设置的方法,那个页面或者方法需要就在那个屏蔽ValidateRequest验证就好了,千万不要贪图简单,全局设置,这样不是我们做互联网开发的好习惯,当你做大的项目的时候就可能带来严重的损失。

好了,方法都说了,该怎么做就是你自己的选择了,希望此篇博文能帮助到大家

  • << 怎样使用office Word 2007/2010/2013 离...
  • 原创一定就能获得百度青睐,转载就一定... >>
  • 作者:
    除非注明,本文原创:知道91,欢迎转载!转载请以链接形式注明本文地址,谢谢。
    原文链接:http://www.zhidao91.com/net-validate-request-false/

    相关文章 近期热评 最新文章

    • oracle数据库相关操作注意事项
      修改Oracle SGA(共享内存) 很多网站说修改Oracle的内存通过命令 如果你这么做了,那么恭喜你,你的Oracle数据库无法启动了。如果你已经这么做了,恢复Oracle启动的方...
    • 使用微信JDK实现微信接口签名验证
      要使用微信的接口必须在绑定的域名下测试;签名必须先向微信请求到access_token,然后用access_token再去请求jsapi_ticket,最后用jsapi_ticket和相关的参数按照ASCII码...
    • ABP开发指南系列教程(2) – 多层架构...
      为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。为了实现分层的体系结构,ABP遵循DDD(领域驱动设计)的原则,将工程分为四个层: 展现层(...
    • ABP开发指南系列教程(1) – 入...
      ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WE...
    • Windows下 JIRA + Agile + Mysql 破解...
      本文讲述了Windows下 JIRA + Agile + Mysql 破解安装示例教程
    • c#类的构造函数继承关系示例剖析
      本文通过示例代码讲解了c#子类的构造函数与父类的关系,子类怎样集成父类的构造函数的。