我有一个表单,使用了ckeditor。这个表单在Asp.Net 2.0和3.5上运行良好,但在Asp.Net 4+上不起作用。我已经添加了ValidateRequest="false"指令。有什么建议吗?
我有一个表单,使用了ckeditor。这个表单在Asp.Net 2.0和3.5上运行良好,但在Asp.Net 4+上不起作用。我已经添加了ValidateRequest="false"指令。有什么建议吗?
在错误页面上找到了解决方案。只需要在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>
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.WebPages.dll
的System.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行为的优点(特别是在处理过程中更早地进行验证),同时也允许您需要通过的请求通过。
<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" %>
<system.web>
中,如下所示
<system.web>
<httpRuntime maxRequestLength="91200" executionTimeout="9000" requestValidationMode="2.0" />
</system.web>
在.NET 4.8中对我来说可以运行。<httpRuntime maxRequestLength="2097151" requestValidationMode="2.0"/>