2017-06-16 49 views
-1

我只是想驗證的名稱屬性,所以我用綁定,但是當我執行ValidateName行動,響應「不正確的」BindAttribute不fiter性能

這是我的查詢:

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

你看的的ModelState錯誤,知道爲什麼嗎? – Scrobi

+0

@Scrobi:Obvoiusly,因爲'Id'是空的,因爲只有名字被綁定到模型 – Tseng

+0

@Tseng,我的觀點只是想看看他們先爲自己做了些什麼。並希望在將來遇到類似問題時應用這些解決問題的技巧。也許我應該描述如何檢查錯誤。 – Scrobi

回答

2

綁定不是用於過濾,而是用於綁定。

Validator將始終驗證模型的所有屬性。創建兩個不同的ViewModel並使用它們。

public class UserNameViewModel 
{ 
    [Required] 
    public string Name { get; set; } 
} 

而且最重要:不要用你的持久模型作爲輸入或你的控制器的輸出,總是用一些視圖模型或綁定模型,然後映射到你的持久模型代碼。

或者在您的簡化的情況下,只使用一個GET或POST參數W/O模型:

[HttpGet] 
public IActionResult ValidateName([FromQuery] string username) 
{ 
    if(/* some validation here */) 
    { 
      return Ok("Valid"); 
    } 
    else 
    { 
      return NotFound("Incorrect"); 
    } 
}