为什么是ValidateInput(False)不工作?

我正在使用vb.net将使用webforms创build的应用程序转换为asp.net mvc框架。 我的意见有问题。 当我提交我的表单时,我收到了死亡的黄色屏幕,显示“客户端发现了潜在危险的Request.Form值”。 我正在使用tinymce作为我的RTE。 我已经看到了自己的观点

ValidateRequest = “假”

我知道,在MVC中,从迄今为止我读到的观点来看,它并不尊重它。 所以我把它放在控制器上。 我尝试了不同的设置:

<ValidateInput(False), AcceptVerbs(HttpVerbs.Post)> _ 

…和…

 <AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _ 

…就像这样…

 <ValidateInput(False)> _ <AcceptVerbs(HttpVerbs.Post)> _ 

只是为了看看它是否有所作为,但我仍然得到了死亡的黄色屏幕。 我只想把它设置为这个视图和我的控制器中我的post所属的具体操作。 我错过了什么吗?

你确定发布的控制器操作是你拥有的属性吗?

使用asp.net 4,您还需要在web.config中configurationvalidation模式。

将以下设置为<system.web>元素的子元素:

 <system.Web> ... <httpRuntime requestValidationMode="2.0"/> 

Asp.Net 4默认将requestValidationMode设置为4.0 ,告诉系统在HTTP请求的BeginRequst阶段之前执行请求validation。 validation将在系统到达action属性之前发生,告诉它不要validation请求,从而使属性无效。 设置requestValidationMode =“2.0”将恢复到asp.net 2.0请求validation行为,允许ValidateInput属性按预期工作。

当你使用自己的实现IModelBinder接口的模型绑定器时,你会注意到这些自定义模型绑定器总是validation数据,而不pipe任何属性。 您可以添加几行代码,使自定义模型绑定器尊重操作的ValidateInputfilter:

  // First check if request validation is required var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled; // Get value var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation); if (valueProviderResult != null) { var theValue = valueProviderResult.AttemptedValue; // etc... } 

Martijn Boland在这里解释得非常好: http : //blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/

您可以尝试访问像HttpContext.Request.Unvalidated.Form [“FieldName”]

请注意,这些build议不会解决由于必须将[ValidateInput(false)]与FormCollection组合使用时发生的错误而导致的问题。

请参阅: ASP.NET MVC 3 ValidateRequest(false)不能与FormCollection一起使用

添加下面的代码行:

 GlobalFilters.Filters.Add(new ValidateInputAttribute(false)); 

到Application_Start()方法。

如果您使用input模型并在您想要的属性上使用AllowHtml,您将被解除封锁。

 public class InputModel { [AllowHtml] public string HtmlInput { get; set; } } ... [ValidateInput(false)] public async Task<ActionResult> ControllerMethod(InputModel model) { }