我有这个视图模型
public class FooBarViewModel
{
public string Foo { get; set; }
[AllowHtml]
public string Bar { get; set; }
}
我不想在其中抛出带有 html的HttpRequestValidationException
if提交,而是向. 我怎么能那样做?.Foo
ModelState
我有这个视图模型
public class FooBarViewModel
{
public string Foo { get; set; }
[AllowHtml]
public string Bar { get; set; }
}
我不想在其中抛出带有 html的HttpRequestValidationException
if提交,而是向. 我怎么能那样做?.Foo
ModelState
您也可以使用属性装饰Foo
属性[AllowHtml]
,并在控制器内部检查它是否包含 HTML,这将允许您向模型状态添加自定义错误。
异常将DefaultModelBinder
在它调用的点内抛出ValueProvider.GetValue
。
要更改行为以捕获异常并将其转换为ModelState
错误,您需要扩展或替换DefaultModelBinder
.
一种可能性是覆盖BindModel
, 并在它调用的地方GetValue
:
ValueProviderResult valueProviderResult = bindingContext.UnvalidatedValueProvider.GetValue(bindingContext.ModelName, skipValidation: !performRequestValidation);
尝试捕获异常并调用bindingContext.ModelState.AddModelError
.
问题在于它DefaultModelBinder
非常复杂,因此您可能需要仔细考虑此类更改需要如何与模型绑定生态系统的其余部分进行交互。