2016-05-13 33 views
4

我在使用ASP.NET 4.5和Web Api時使用JsonPatchDocument。我的控制器看起來是這樣的:使用Web API和JSON補丁文檔進行模型驗證

[HttpPatch] 
[Route("MyRoute/{PersonItem1}/{PersonItem2}/")] 
public IHttpActionResult ChangePerson([FromHeader]Headers, [FromBody]JsonPatchDocument<PersonDto> person) 
{ 
    // Do some stuff with "person" 
} 

而且PersonDto

public class PersonDto 
{ 
    public string Name { get; set; } 
    public string Email { get; set; } 
} 

現在,我可以發送PATCH請求是這樣的:

{ 
    "op": "op": "replace", "path": "/email", "value": "[email protected]" 
} 

現在,讓我們說,我添加一些數據註釋:

public class PersonDto 
{ 
    public string Name { get; set; } 

    [MaxLength(30)] 
    public string Email { get; set; } 
} 

確保驗證的最佳方式是在不寫入其他驗證的情況下執行。它甚至有可能嗎?

回答

1

有簡單的方法:

  1. 從你的資料庫讓你的對象。
  2. 將對象深度複製,以便您擁有對象A和B.
  3. 將更改與person.ApplyUpdatesTo(objB)一起應用。
  4. 創建驗證對象A和B之間差異的擴展方法。
  5. 如果驗證過程良好,則不拋出錯誤。

如果客戶端試圖修改不可變字段或者對象B中的新信息違反了您的約束條件,則會捕獲這個錯誤。

請注意,這不是一個好的解決方案,因爲如果您碰巧改變了您的約束條件,您將不得不在兩處更改代碼。

+0

謝謝!我正在尋找類似於過濾器的東西,它不需要我在每個控制器中編寫這樣的代碼,但這是一個好的開始。 –

相關問題