ValidateRequest =“false”在Asp.Net 4中不起作用

我有一个表格,我使用ckeditor。 这种forms在Asp.Net 2.0和3.5中工作正常,但现在在Asp.Net 4+中不起作用。 我有ValidateRequest =“false”指令。 有什么build议么?

在错误页面find解决scheme。 只需要添加requestValidationMode =“2.0”

<system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime requestValidationMode="2.0" /> </system.web> 

MSDN信息: HttpRuntimeSection.RequestValidationMode属性

有一种方法可以将validation返回到2.0页面。 只需将下面的代码添加到您的web.config中:

 <location path="XX/YY"> <system.web> <httpRuntime requestValidationMode="2.0" /> </system.web> </location> 

我知道这是一个古老的问题,但如果你在MVC 3中遇到这个问题,那么你可以使用[ValidateInput(false)]来修饰你的ActionMethod ,并closures一个ActionMethod请求validation,这很方便。 而且您不需要对web.config文件进行任何更改,因此您仍然可以在其他地方使用.NET 4请求validation。

例如

 [ValidateInput(false)] public ActionMethod Edit(int id, string value) { // Do your own checking of value since it could contain XSS stuff! return View(); } 

这在不改变validation模式的情况下工作。

您必须使用System.Web.Helpers.Validation.Unvalidated助手。 它将返回一个UnvalidatedRequestValues对象,该对象允许在不validation的情况下访问表单和QueryString。

例如,

 var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey")); 

适用于我的MVC3和.NET 4。

请注意,另一种方法是保持4.0validation行为,但要定义从RequestValidator派生自己的类并进行设置:

 <httpRuntime requestValidationType="YourNamespace.YourValidator" /> 

YourNamespace.YourValidator很好,你应该可以猜到…)

这样你就保持了4.0s行为的优点(特别是validation在处理的早些时候发生),同时也允许你需要通过的请求。