我正在使用vb.net将我使用webforms创建的应用程序转换为asp.net mvc框架。我的一个观点有问题。当我提交表单时,我得到了死亡的黄色屏幕,上面写着“从客户端检测到有潜在危险的Request.Form值”。我使用tinymce作为我的RTE。我已经设置了视图本身
ValidateRequest = “假”
我知道在MVC中,从我到目前为止所阅读的内容来看,它并不尊重它。所以我也把它放在控制器动作上。我尝试了不同的设置:
<ValidateInput(False), AcceptVerbs(HttpVerbs.Post)> _
...和...
<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _
......还有这样......
<ValidateInput(False)> _
<AcceptVerbs(HttpVerbs.Post)> _
只是为了看看它是否有所作为,但我仍然得到死亡的黄色屏幕。我只想为此视图设置它以及我的帖子所属的控制器中的特定操作。我错过了什么吗?
答案 0 :(得分:130)
使用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
属性按预期工作。
答案 1 :(得分:17)
您确定要发布的控制器操作是否具有属性?
答案 2 :(得分: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/
答案 3 :(得分:1)
请注意,这些建议无法解决因必须将[ValidateInput(false)]与FormCollection结合使用而导致的错误所导致的问题。
请参阅:ASP.NET MVC 3 ValidateRequest(false) not working with FormCollection
答案 4 :(得分:1)
您可以尝试访问该字段 HttpContext.Request.Unvalidated.Form [&#34;字段名&#34;]
答案 5 :(得分:0)
如果您使用输入模型并在所需的属性上使用AllowHtml,您将被取消阻止。
public class InputModel
{
[AllowHtml]
public string HtmlInput { get; set; }
}
...
[ValidateInput(false)]
public async Task<ActionResult> ControllerMethod(InputModel model)
{
}
答案 6 :(得分:-1)
添加以下代码行:
GlobalFilters.Filters.Add(new ValidateInputAttribute(false));
到Application_Start()方法。