C# ModelState.IsValid在asp.net webapi中的工作原理
我是Asp.net新手。我有一个模型,它有一些属性,如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
[必需]
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));
现在,您都已设置好在模型上使用数据注释,这些数据注释存在于可移植库中。希望它能帮助别人