2012-05-31 82 views
2

死簡單的問題,可能不是那麼簡單的答案。發佈JSON。WebAPI只綁定第一個參數

public void Post(Model1 model1, Model2 model2) 
{} 

model1被填充,但不是model2(空)。

public void Post(Model2 model2, Model1 model1) 
{} 

現在,model2被填充,但不是model1(null)。

爲什麼?

編輯

的原因有兩個參數? Model2過去是從Model1引用的,但沒有奏效。那是我分手的時候。

編輯

權。感謝上述問題的回答。現在原因是原始設置不起作用。我不再是形式世界了。我張貼Json。如果你的模型中有子對象,那麼在你的json中發佈子對象。

鑑於

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

class UserEditModel { 
     public string User {get; set;} 
     public ProductEditModel Product {get; set;} 
} 

以下

{"user": "philip", "product.name": "barbie"} 

是行不通的。

{"user": "philip", "productname": "barbie"} 


{"user": "philip", "product_name": "barbie"} 

什麼工作:如果您在JS嘗試並設置思邁特相當於

{user: "philip", product.name: "barbie"} 

既無以下工作,我不知道爲什麼他們會你甚至得到一個錯誤這應該是顯而易見我的專業是

{"user": "philip", "product": {"name": "barbie"}} 

請踢我。

當心!以下對於上述模型的相應編輯不起作用。

{"user": "philip", "ProductEditModel": {"name": "barbie"}} 

回答

2

不知道你正在使用的版本,但我們已經談妥的一般規則是,結合複雜類型的Web API時,考慮到代表一個單一的實體請求的整個身體,因此單個操作參數。在你的情況下,如果你想綁定多個Model,你可以引入一個自定義綁定對象,或者你可以綁定到一個Model[]或其他集合類型。

+0

模型[]不會'工作。他們是非常不同的類型。原來是Model1.Model2設置。我是否很快放棄了這一點? – Martin

+0

哦pleaaase踢我。一切正常。看我的編輯。 – Martin