问题说明了一切,我有一个 Web API 控制器操作,它需要一个 POCO。这是一个 POST 操作,我故意不将参数发布到操作,但是 ModelState.IsValid 属性仍然显示为 true。为什么会这样?我必须在控制器操作及其参数上设置一个属性来强制验证吗?
问问题
343 次
2 回答
1
Null 是对象的有效值。使 POCO 中的属性 [必需] 以强制检查。
于 2013-03-24T23:10:30.853 回答
0
有类似的问题。你有一个合理的担忧。请看一下:
https://blog.markvincze.com/how-to-validate-action-parameters-with-dataannotation-attributes/
数据注释救援:
public class ValidateActionParametersAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var descriptor = context.ActionDescriptor as ControllerActionDescriptor;
if (descriptor != null)
{
var parameters = descriptor.MethodInfo.GetParameters();
foreach (var parameter in parameters)
{
var argument = context.ActionArguments[parameter.Name];
EvaluateValidationAttributes(parameter, argument, context.ModelState);
}
}
base.OnActionExecuting(context);
}
private void EvaluateValidationAttributes(ParameterInfo parameter, object argument, ModelStateDictionary modelState)
{
var validationAttributes = parameter.CustomAttributes;
foreach (var attributeData in validationAttributes)
{
var attributeInstance = CustomAttributeExtensions.GetCustomAttribute(parameter, attributeData.AttributeType);
var validationAttribute = attributeInstance as ValidationAttribute;
if (validationAttribute != null)
{
var isValid = validationAttribute.IsValid(argument);
if (!isValid)
{
modelState.AddModelError(parameter.Name, validationAttribute.FormatErrorMessage(parameter.Name));
}
}
}
}
}
然后使用它:
[ValidateActionParameters]
public IActionResult Post([FromBody][Required]Product product)
于 2017-06-15T12:09:31.537 回答