我只想验证Name属性,所以我使用Bind,但是当我执行ValidateName操作时,响应为"不正确"
这是我的疑问:
http://localhost/api/values/ValidateName?Name=John
为什么它会给我一个"不正确"如果我用Bind过滤?
[HttpGet]
public IActionResult ValidateName([Bind("Name")] User user)
{
if (ModelState.IsValid)
{
return Ok( "Valid" );
}
else
{
return NotFound( "Incorrect" );
}
}
public class User
{
[Required]
public int? Id { get; set; }
[Required]
public string Name { get; set; }
}
答案 0 :(得分:2)
Bind不是用于过滤,而是用于绑定。
Validator将始终验证模型的所有属性。创建两个不同的ViewModel并改为使用它们。
public class UserNameViewModel
{
[Required]
public string Name { get; set; }
}
最重要:不要将持久性模型用作控制器的输入或输出,始终使用一些ViewModel或Binding模型,然后在代码中映射到持久性模型。
或者在简化的情况下,只需使用没有模型的get或post参数:
[HttpGet]
public IActionResult ValidateName([FromQuery] string username)
{
if(/* some validation here */)
{
return Ok( "Valid" );
}
else
{
return NotFound( "Incorrect" );
}
}