35

我正在将使用 webforms 创建的应用程序转换为使用 vb.net 的 asp.net mvc 框架。我的一个观点有问题。当我提交表单时,我收到黄屏提示“从客户端检测到潜在危险的 Request.Form 值”。我使用 tinymce 作为我的 RTE。我已经设置了视图本身

验证请求 =“假”

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

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

...和...

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

……还有这样的……

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

只是想看看它是否有所作为,但我仍然得到黄屏死机。我只想为这个视图和我的帖子所涉及的控制器中的特定操作设置它。我错过了什么吗?

4

7 回答 7

136

使用 asp.net 4,您还需要在 web.config 中配置验证模式。

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

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

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

于 2010-03-27T20:32:13.767 回答
17

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

于 2009-04-30T16:09:18.090 回答
3

当您使用自己的实现IModelBinder接口的模型绑定器时,您会注意到这些自定义模型绑定器始终验证数据,而不管任何属性。您可以添加几行代码以使自定义模型绑定器尊重操作的ValidateInput过滤器:

// 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/

于 2012-01-23T18:36:23.463 回答
2

您可以尝试访问像 HttpContext.Request.Unvalidated.Form["FieldName"] 这样的字段

于 2016-06-13T12:36:45.127 回答
1

请注意,这些建议不会解决当您必须将 [ValidateInput(false)] 与 FormCollection 结合使用时出现的错误所导致的问题。

请参阅:ASP.NET MVC 3 ValidateRequest(false) 不适用于 FormCollection

于 2010-12-08T09:21:43.207 回答
0

添加以下代码行:

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

到 Application_Start() 方法。

于 2013-12-18T11:12:26.737 回答
0

如果您使用输入模型并在所需属性上使用 AllowHtml,您将被解除阻塞。

public class InputModel
{
    [AllowHtml]
    public string HtmlInput { get; set; }
}

...
[ValidateInput(false)]
public async Task<ActionResult> ControllerMethod(InputModel model)
{
}
于 2017-01-29T06:30:18.703 回答