2017-04-18 27 views
0

採取以下類...的WebAPI條件基礎上的結合HTTP動詞

public class Person 
{ 
    public long Id { get; set; } 
    public long CaseID { get; set; } 
    public string FirstName { get; set; } 
} 

而下面的Web API調用...

public IHttpActionResult Put(long id, [FromBody] Person person) 

對於PUT調用,我們希望模型綁定忽略CaseID屬性並僅保存Id和FirstName。

我在考慮一個自定義模型聯編程序來解決這個問題。所以模型綁定器應該拉動HTTP動詞(在這種情況下是PUT),如果PUT只綁定Id和FirstName。對於其他動詞綁定所有屬性。

有沒有辦法使用默認的模型聯編程序,你可以引入這種類型的邏輯?

+0

可能重複[設置基於HTTP動詞的必填字段](http://stackoverflow.com/questions/22940709/set-required-fields-based-on-http-verb) – Jaya

回答

2

這就像用石頭敲擊指甲。它可能會完成工作,但它不是正確的工具。您的模型應該是您期望的資源的表示。換句話說,如果您不想要CaseID,那麼您的型號不應該有該屬性。你可以用簡單的繼承來輕鬆解決這個問題。例如,你可以這樣做:

public class Person 
{ 
    public long Id { get; set; } 
    public string FirstName { get; set; } 
} 

public class PersonWithCaseID : Person 
{ 
    public long CaseID { get; set; } 
} 

然後,當你不想做CaseID,如您的PUT方法在這裏:

public IHttpActionResult Put(long id, [FromBody] Person person) 

當你這樣做:

public IHttpActionResult Post(long id, [FromBody] PersonWithCaseID person) 

這更加明確。 100%清楚你在做什麼,API仍然是自我記錄:你可以很容易地知道Put不接受CaseID