我有一个使用 ckeditor 的表单。这种形式在 Asp.Net 2.0 和 3.5 中运行良好,但现在在 Asp.Net 4+ 中不起作用。我有 ValidateRequest="false" 指令。有什么建议么?
5 回答
在错误页面本身找到解决方案。只需要在 web.config 中添加 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.0 行为的优势(具体而言,验证发生在处理的早期),同时还允许您需要通过的请求。