ASP.NET Web API 2.2模型绑定短路自定义模型验证

时间:2017-03-11 16:48:10

标签: asp.net-web-api2 model-binding fluentvalidation custom-validators

鉴于我的Employee模型具有可为空的GenderID

public class Employee
{        
    public int? GenderID { get; set; }     
}

使用FluenValidation

在GenderID上自定义Fluent验证规则
RuleFor(x=> x.GenderID).NotNull().WithMessage("Please provide a valid Gender");

当我POST员工到NULL GenderID

的以下端点时

然后服务按预期返回验证摘要。

    [HttpPost("Employee/Create")]
    public IActionResult Create([FromBody]Employee employee)
    {
        try
        {             
            if (!ModelState.IsValid)
            {
                // return validation summary (code omitted for brevity)
            }

            var result = _respository.CreateEmployee(employee);               

            return Ok();
        }
    }

如果我将Employee模型更改为具有不可为空的GenderID

public class Employee
{        
    public int GenderID { get; set; }     
}

然后服务返回400 Bad Request响应而不处理自定义验证。需要验证摘要才能绑定到UI。

将GenderID设置为可空的唯一原因是允许从自定义验证器创建验证摘要。

如何在不需要将所有模型属性设置为可空的情况下应用自定义验证?

1 个答案:

答案 0 :(得分:0)

我认为您收到的错误请求是因为将null GenderId转换为not nullable int时出错。与流畅的验证无关。 我的意见是,如果您希望在请求中收到null GenderId,您应该将属性GenderId保持为可空,并让fluent管理其规则中的错误。如果您认为请求将始终包含非null GenderId,则使GenderId不可为空。如果GenderId(始终不为null)为null,则应抛出运行时异常。

相关问题