我有一个ASP.NET MVC表单,可能(通常会)提交一个响应,触发"从客户端检测到一个潜在危险的Request.Form值"错误.
为了解决这个问题,我在页面指令中放置了一个ValidateRequest ="false".
唯一的问题:我仍然得到错误!
现在,一切都很好,直到我今天早上更新到ASP.NET MVC RC,并且(根据自述文件),将以下内容放在Views web.config中:
因此,对于所有页面,validateRequest都应为false,对吧?我错过了什么?
在MVC中,验证发生在控制器级别,而不是页面级别.要知道这是为什么,请考虑在执行控制器操作时,我们不知道将选择哪个视图进行渲染.(实际上,控制器操作甚至可能根本不呈现视图!它可能会在客户端上打开文件下载提示.)此外,如果用户向服务器提交恶意输入,则在呈现视图时它是为时已晚,无所事事.控制器已经将危险的输入提交给数据库.
相反,请使用属性[ValidateInput(false)]装饰控制器或操作.这将导致我们取消对该控制器或操作的请求验证.
它需要使用属性[ValidateInput(false)]来装饰控制器或动作,并将requestValidationMode ="2.0"添加到web.config文件中:示例:
控制器:
[ValidateInput(false)] public class MensajesController : Controller { //or in an action [ValidateInput(false)] [HttpPost] public ActionResult Create(FormCollection collection) { } }
配置文件: