2015-04-20 41 views
1

是否可以处理系统范围内的A potentially dangerous Request.Form value was detected from the client (Model.Title="<p>some text</p>").Answers in this question建议在每个属性上添加一些验证。我不想这样做。是否有可能将用户重定向回表单并显示错误消息,告诉他们输入的是无效输入?在窗体中输入HTML时Asp Mvc处理错误

编辑: 为了澄清,我不想接受HTML,我只是想向用户显示一个友好的错误信息(如药粥属性的验证)。

编辑2:我知道我可以添加属性到我的属性,以允许HTML或禁用验证。由于有很多表格,我不想用[AllowHtml]污染我的房产或禁用验证(因为我需要验证)。我正在寻找一种方法来拦截MVC流,并在触发时捕获此错误。

+0

可能重复的[从客户端检测到潜在危险的Request.Form值](http://stackoverflow.com/questions/81991/a-potentially-dangerous-request-form-value-was-detected-from -the-client) – greg84

+0

@ greg84:我不想接受输入。我只是想知道是否有一个简单的方法来捕捉这个特定的错误。 – Thijs

回答

1

如果你不想接受HTML,我认为唯一的办法是让HTML被提交,然后检查服务器端是否存在任何HTML标记。如果找到了,你就那么你的用户的代码返回的形式是这样的:

if (input.Contains("<")) { 
    Model.AddModelError("HTML_FOUND", "There is HTML in your input. Please remove the HTML before trying to submit again"); 
    return View(); 
} 

这或许可以通过使用过滤器https://msdn.microsoft.com/en-us/library/gg416513%28VS.98%29.aspx

+0

在进入控制器之前,错误会被抛出,所以这段代码是无法访问的,除非我为每个属性提供'[AllowHtml]' - 属性(我不想这样做)。 – Thijs

+0

有它!我不知道过滤器。我会检查出来,并接受我的工作。日Thnx! – Thijs

0

选项1

[ValidateInput(false)] 
全系统实施本

在你的动作上添加这个,这将禁用所有的字段html检查。
选项2

[AllowHtml] 

添加此你想允许html.this将只允许属性包含HTML属性,别人没有。 但是,如果你的行动,比如

public ActionResult Index(FormCollection form) 

选项2不工作,你必须使用

public ActionResult Index(ModelXXX model) 

,因为,这将使用模型绑定器,而不是的FormCollection。