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

我有一个表单,在其中我使用编辑器。这种形式在 Asp 很有效。Net 2.0和3.5,但是现在它不能在 Asp 中工作。净值4 + 。我有 ValidateRequest = “ false”指令。有什么建议吗?

155802 次浏览

在错误页面上找到了解决方案,只需要在 web.config 中添加 requestValidationMode = “2.0”即可

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

MSDN 信息: 请求验证模式属性

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

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


...
the rest of your configuration
...


</configuration>

这可以在不更改验证模式的情况下工作。

您必须使用来自 System.Web.WebPages.dllSystem.Web.Helpers.Validation.Unvalidated助手。它将返回一个 UnvalidatedRequestValues对象,该对象允许在没有验证的情况下访问表单和 QueryString。

比如说,

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

为我工作的 MVC3和.NET 4。

注意,另一种方法是与4.0验证行为保持一致,但是定义自己从 RequestValidator派生并设置的类:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

(在 YourNamespace.YourValidator良好的情况下,您应该能够猜到... ...)

这样可以保持4.0 s 行为的优势(特别是验证在处理的早期发生) ,同时也允许您需要通过的请求通过。

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

例如:。

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