我有API需要验证我的用户模型.我选择一种方法,为创建/编辑操作创建不同的类,以避免质量分配和划分验证和实际模型分开.
我不知道为什么,但ModelState.IsValid
即使它不应该返回真实.难道我做错了什么?
public HttpResponseMessage Post(UserCreate user)
{
if (ModelState.IsValid) // It's valid even when user = null
{
var newUser = new User
{
Username = user.Username,
Password = user.Password,
Name = user.Name
};
_db.Users.Add(newUser);
_db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.Created, new { newUser.Id, newUser.Username, newUser.Name });
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
Run Code Online (Sandbox Code Playgroud)
public class UserCreate
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string Name { get; set; …
Run Code Online (Sandbox Code Playgroud) 我有一个具有必需属性的Model对象
public class ApiPing
{
[Required]
public DateTime ClientTime { get; set; }
public DateTime ServerTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个控制模型状态的Controller方法.
public IHttpActionResult Ping(ApiPing model)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
model.ServerTime = DateTime.UtcNow;
return Ok(model);
}
Run Code Online (Sandbox Code Playgroud)
如果我向action方法提交了一个正确的请求(带有模型),我会从ModeState.IsValid(true)中获得正确的值.但是,当我提交无效请求(没有模型,因此模型为null)时,我得到一个错误的ModelState.IsValid(也是true).
我可以简单地检查一下我的代码中的模型是否为null,但这有气味.这是一个预期的"功能"还是ModelState验证中的错误?难道我做错了什么 ?我期待太多了吗?