Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ModelState.IsValid在asp.net webapi中的工作原理_C#_Asp.net_Asp.net Web Api_Data Annotations - Fatal编程技术网

C# ModelState.IsValid在asp.net webapi中的工作原理

C# ModelState.IsValid在asp.net webapi中的工作原理,c#,asp.net,asp.net-web-api,data-annotations,C#,Asp.net,Asp.net Web Api,Data Annotations,我是Asp.net新手。我有一个模型,它有一些属性,如[必需] public class UserNamePasswordModel { public string UserName { get; set; } public string Password { get; set; } [Required] public string ConfirmPassword { get; set; } [Required] public string Ema

我是Asp.net新手。我有一个模型,它有一些属性,如
[必需]

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.
}
公共异步任务寄存器(UserNamePasswordModel模型)
{
如果(!ModelState.IsValid)
return BadRequest(ModelState);//调试器未提交到此处。
}
正如我在电子邮件确认密码上提供的
注释
,但当我请求注册终点时,则
Modelstate.IsValid
应为
false
,但事实并非如此。
因此,我应该在某个地方添加一些代码来实现这一点。

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

模型:-在可移植类库中

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类的应用程序\u start()中添加此代码

TypeDescriptor.AddProvider(new AssociatedMetadataTypeTypeDescriptionProvider(typeof(AddPasswordModel),
                                   typeof(AddPasswordModelServer)),
                                   typeof(AddPasswordModel));
现在,您都已设置好在模型上使用数据注释,这些数据注释存在于可移植库中。希望它能帮助别人