我正在从事MVC4项目,并且我有一个要禁用验证的操作,例如:
[HttpPost]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult AddNewItems(AddNewItemsModel model, string postType)
{ ... }
即使设置了“ ValidateInput(false)”,应用程序仍坚持对数据进行验证,等等。我已逐步执行了代码,并确认已调用此操作,但似乎忽略了该属性。是否有一些简单的替代方法可以完成这项工作(尤其是不需要另一层模型等的方法)?
经过大量研究,我得出的结论是,验证已深入集成到默认模型绑定程序中,并且MVC基本上忽略了ValidateInput属性。我会注意到在web.config中使用以下内容
<system.Web>
...
<httpRuntime requestValidationMode="2.0"/>
有时会纠正这种情况,但有时不会。我注意到,与“ ValidateInput”属性结合使用的此设置仅被间歇性地使用,这使它无用了。最后,我提出了一个动作过滤器,定义如下:
public class ClearModelErrorsAttribute : ActionFilterAttribute
{
// ---------------------------------------------------------------------------------------
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
ModelStateDictionary msd = filterContext.Controller.ViewData.ModelState;
foreach (var item in msd.Values)
{
item.Errors.Clear();
}
}
}
您可以看到它正在用蛮力消除所有错误(由于无法关闭验证),这对于我的特定情况是有效的。显然,这不是最可靠的解决方案(也是黑客),但可以轻松地对其进行修改以适用于更特定的场景。
我的动作的新签名如下:
[HttpPost]
[ValidateAntiForgeryToken]
[ClearModelErrors]
public ActionResult AddNewItems(AddNewItemsModel model, string postType)
{ ... }
并且我已经从web.config中删除了上面提到的项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句