AllowHtml, HttpRequestValidationException and ModelState
本文关键字:ModelState and HttpRequestValidationException AllowHtml | 更新日期: 2023-09-27 18:02:23
我有这个viewmodel
public class FooBarViewModel
{
public string Foo { get; set; }
[AllowHtml]
public string Bar { get; set; }
}
如果.Foo
与html一起提交,我想向ModelState
添加消息,而不是抛出HttpRequestValidationException
。我怎么能这么做呢?
您可以用[AllowHtml]
属性来装饰Foo
属性,以及在控制器内部检查它是否包含HTML,这将允许您添加自定义错误到模型状态
异常将在DefaultModelBinder
调用ValueProvider.GetValue
时抛出。
要更改行为以捕获异常并将其转换为ModelState
错误,您需要扩展或替换DefaultModelBinder
。
一种可能是重写BindModel
,并且在它调用GetValue
的地方:
ValueProviderResult valueProviderResult = bindingContext.UnvalidatedValueProvider.GetValue(bindingContext.ModelName, skipValidation: !performRequestValidation);
尝试捕获异常并调用bindingContext.ModelState.AddModelError
。
问题是DefaultModelBinder
非常复杂,所以您可能需要仔细考虑这样的更改需要如何与模型绑定生态系统的其余部分交互。