为什么是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) { }