BindAttribute不适合属性

时间:2017-06-16 14:03:39

标签: c# asp.net asp.net-core

我只想验证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; }
}

1 个答案:

答案 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" );
     }
}