Answers:
在错误页面找到解决方案。只需添加requestValidationMode =“ 2.0”
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
有一种方法可以将验证返回到一页的2.0。只需将以下代码添加到您的web.config中:
<configuration>
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
the rest of your configuration
...
</configuration>
我知道这是一个古老的问题,但是如果您在MVC 3中遇到此问题,则可以用来进行修饰ActionMethod
,[ValidateInput(false)]
并且只需关闭单个请求验证即可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();
}
这无需更改验证模式即可工作。
您必须使用System.Web.Helpers.Validation.Unvalidated
来自的帮助程序System.Web.WebPages.dll
。它将返回一个UnvalidatedRequestValues
对象,该对象无需验证即可访问表单和QueryString。
例如,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
适用于MVC3和.NET 4。
请注意,另一种方法是保持4.0验证行为,但定义派生自RequestValidator
并设置的类:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(哪里YourNamespace.YourValidator
好,您应该可以猜测...)
这样,您可以保留4.0s行为的优点(特别是,验证在处理的早期进行),同时还允许您通过的请求得以通过。