我正在使用ASP.NET MVC 2,.NET 4.0。ASP.NET请求验证异常即使验证被禁用
我有一个控制器,禁用请求验证:
[AcceptVerbs("POST")]
[ValidateInput(false)]
public ActionResult Add(string userId, FormCollection formValues)
{
//...
}
,我仍然得到一个HttpRequestValidationException当POST包含HTML:
System.Web.HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (ThisWeek=""). at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) at System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) at System.Web.HttpRequest.get_Form() at System.Web.Mvc.HttpRequestExtensions.GetHttpMethodOverride(HttpRequestBase request) at System.Web.Mvc.AcceptVerbsAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) at System.Linq.Enumerable.All[TSource](IEnumerable`1 source, Func`2 predicate) at System.Web.Mvc.ActionMethodSelector.RunSelectionFilters(ControllerContext controllerContext, List`1 methodInfos) at System.Web.Mvc.ReflectedControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName) at System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, String actionName) at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) at System.Web.Mvc.Controller.ExecuteCore() at System.Web.Mvc.MvcHandler.c__DisplayClass8.b__4() at System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass1.b__0() at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
我需要让输入HTML文本这里该应用程序是一个错误跟踪系统,人们在提交错误时讨论HTML。我正确处理这个动作的输入,并且在重新输出时对它们进行适当的编码,所以对这个动作禁用验证是合理的。
我们最近切换到MVC2和.NET 4,这开始出现。从堆栈跟踪看来,验证是作为HTTP方法覆盖的新支持的处理的一部分发生的(通过包括特殊命名的隐藏输入使POST看起来像PUT或DELETE)。但我不知道如何告诉子系统停止验证输入。
我需要做些什么来完成这项工作?
的答案是正确的,但想补充一点,如果你使用你的RenderAction也有发生禁用任何“孩子”验证。 – jfar 2010-08-19 16:37:10