AllowHtml,HttpRequestValidationException和ModelState

时间:2011-07-16 21:42:00

标签: c# asp.net-mvc-3 xss modelstate request-validation

我有这个viewmodel

public class FooBarViewModel
{
    public string Foo { get; set; }

    [AllowHtml]
    public string Bar { get; set; }
}

我希望向HttpRequestValidationException添加一条消息,而不是在.Foo提交ModelState的情况下提交h {{1}}。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您也可以使用Foo属性修饰[AllowHtml]属性,并在控制器内部检查它是否包含允许您向模型状态添加自定义错误的HTML。

答案 1 :(得分:0)

DefaultModelBinder调用ValueProvider.GetValue时,ModelState会抛出异常。

要更改行为以捕获异常并将其转换为DefaultModelBinder错误,您需要扩展或替换BindModel

一种可能性是覆盖GetValue,并在其调用ValueProviderResult valueProviderResult = bindingContext.UnvalidatedValueProvider.GetValue(bindingContext.ModelName, skipValidation: !performRequestValidation); 时:

bindingContext.ModelState.AddModelError

尝试捕捉异常并致电DefaultModelBinder

问题在于{{1}}非常复杂,因此您可能需要仔细考虑这种变化如何与模型绑定生态系统的其余部分进行交互。