ModelState.IsValid即使它不应该是什么? [英] ModelState.IsValid even when it should not be?

查看:140
本文介绍了ModelState.IsValid即使它不应该是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有API,我需要验证我的用户模型。我选择,我创建创建/编辑行动,以避免大规模的分配和除法验证和除了实际模型不同类别的方法。

I have API where I need to validate my user model. I choose an approach where I create different classes for Create/Edit actions to avoid mass-assignment and divide validation and actual model apart.

我不知道为什么,但 ModelState.IsValid 返回true,即使它不应该。难道我做错了什么?

I don't know why but ModelState.IsValid returns true even when it should not. Am I doing something wrong?

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);
}

模型

public class UserCreate
{
    [Required]
    public string Username { get; set; }
    [Required]
    public string Password { get; set; }
    [Required]
    public string Name { get; set; }
}

调试证明

Debug proof

推荐答案

ModelState.IsValid 内部检查 Values​​.All(的ModelState = GT ; modelState.Errors.Count == 0)前pression。

The ModelState.IsValid internally checks the Values.All(modelState => modelState.Errors.Count == 0) expression.

由于没有输入收集将是空的,所以 ModelState.IsValid 真正

Because there was no input the Values collection will be empty so ModelState.IsValid will be true.

所以,你需要用明确的处理这种情况:

So you need to explicitly handle this case with:

if (user != null && ModelState.IsValid)
{

}

这是否是一个好的或坏的设计决策,如果你没有验证它真正的是一个不同的问题...

Whether this is a good or bad design decision that if you validate nothing it will true is a different question...

这篇关于ModelState.IsValid即使它不应该是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆