我正在使用vb.net将我使用webforms创建的应用程序转换为asp.net mvc框架。我的一个观点有问题。我得到死亡的黄色屏幕说<!>;从客户端<!>检测到一个潜在危险的Request.Form值。当我提交表格时我使用tinymce作为我的RTE。我已经设置了视图本身

  

ValidateRequest = QUOT <!>假QUOT <!>;

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

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

...和...

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

......还有这样......

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

只是为了看看它是否有所作为,但我仍然得到死亡的黄色屏幕。我只想为此视图设置它以及我的帖子所属的控制器中的特定操作。我错过了什么吗?

有帮助吗?

解决方案

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

其他提示

使用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属性按预期工作。

当您使用自己的模型绑定器实现 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/

请注意,这些建议无法解决因必须将[ValidateInput(false)]与FormCollection结合使用而导致的错误所导致的问题。

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

您可以尝试访问该字段 HttpContext.Request.Unvalidated.Form [QUOT <!>; <!>字段名QUOT;]

如果您使用输入模型并在所需的属性上使用AllowHtml,您将被取消阻止。

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

...
[ValidateInput(false)]
public async Task<ActionResult> ControllerMethod(InputModel model)
{
}

添加以下代码行:

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

到Application_Start()方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top