ModelState.IsValid如何在asp.net webapi中工作

时间:2014-06-12 09:58:33

标签: c# asp.net asp.net-web-api data-annotations

我是Asp.net的新手。我的模型有一些属性,如[Required]

public class UserNamePasswordModel
{
    public string UserName { get; set; }
    public string Password { get; set; }
    [Required]
    public string ConfirmPassword { get; set; }
    [Required]
    public string Email { get; set; }
}

现在这是我简单的控制器方法

public async Task<IHttpActionResult> Register(UserNamePasswordModel model)
{
    if (!ModelState.IsValid)
        return BadRequest(ModelState); // debugger is not comming come here.
}

因为我在 电子邮件 ConfirmPassword 上提供了Annotations但是当我制作了请求注册终点,然后Modelstate.IsValid应为false,但事实并非如此。 所以我应该在某个地方添加一些代码来实现这个目的。

1 个答案:

答案 0 :(得分:1)

我想我的答案实际上我的模型类在不同的项目中我只是知道数据注释不可移植所以 ModelState.IsValid 不是能够看到那些注释,因此每次都返回真实。 希望它对某人有帮助。 如果想要进行模型状态验证,则对应具有不同名称的模型,并在后一类中添加注释,如: -

模型: - 在您的便携式类库中。

public class AddPasswordModel 
{
    public string NewPassword { get; set; }
    public string ConfirmPassword { get; set; }
}

相同的模型类,但项目中有注释。

public class AddPasswordModelServer 
{
    [Required]
    public string NewPassword { get; set; }
    [Required]
    public string ConfirmPassword { get; set; }
}

现在告诉您的项目AddPasswordModel将使用哪种元数据,以便我们可以使用注释。 现在,您 Global.asax 类的 Application_start()添加此代码。

TypeDescriptor.AddProvider(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(AddPasswordModel),
                                   typeof(AddPasswordModelServer)),
                                   typeof(AddPasswordModel));

现在,您已准备好在可移植库中存在的模型上使用数据注释。希望它对某人有所帮助。