在窗体中输入HTML时Asp Mvc处理错误

时间:2015-04-20 09:15:15

标签: c# asp.net asp.net-mvc validation

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

修改: 为了澄清,我不想接受HTML,我只是想向用户显示一个友好的错误消息(就像用于验证属性的消息)。

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

2 个答案:

答案 0 :(得分: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

可能可以在整个系统范围内实施

答案 1 :(得分:0)

选项1

[ValidateInput(false)]

在您的操作中添加此项,这将禁用所有字段html检查 选项2

[AllowHtml]

在你想要允许html的属性上添加这个。这只会允许该属性包含html,其他不包含html。 但是,如果你采取行动

public ActionResult Index(FormCollection form)

选项2不起作用,必须使用

public ActionResult Index(ModelXXX model)

因为,这将使用modelbinder,而FormCollection不会。