2016-06-07 83 views
1

我正在使用Postman來測試我編寫的PUT Web API方法,但不管我嘗試使用強類型化參數,我傳遞(MyModel)始終爲null。Web API Put - 傳遞的參數爲null

控制器動作

[Route("api/myapiname/{id}/{name}")] 
[HttpPut] 
public HttpResponseMessage Put(int id, string name, MyModel mymodel) 
{ 
    *//Do stuff* 
} 

爲MyModel類

public class MyModel 
{ 
    public MyModel() { } 

    private Boolean _b; 
    public Boolean b { set { _b = value; } get { return _b; } } 

    private String _comments; 
    public String comments { set { _comments = value; } get { return _comments;    }} 
} 

URL

http://localhost:37781/api/myapiname/123456/laura 

郵差

PUT: URL above 

Headers: 
Content-Type: application/json 

Body: 
{ 
"MyModel":[{"b": true,"comments": "Comments go here"}] 
} 

我試圖改變這一行:

public HttpResponseMessage Put(int id, string name, MyModel mymodel) 

public HttpResponseMessage Put(int id, string name, [FromBody]MyModel mymodel) 

和郵差改變內容類型到的X WWW窗體-urlencoded和我我也嘗試更改傳遞給的內容: = [{「b」:true,「評論」:「評論轉到此處」}]

我已經嘗試了StackOverflow上提供的各種解決方案,但沒有嘗試工作,有人可以幫我嗎?

回答

2

當行動期待一個單一的MyModel對象時,您的郵遞員請求正在顯示具有正文中的數組屬性的對象。

這是符合您的例子動作的請求的原始片段:

PUT /api/myapiname/123456/laura HTTP/1.1 
Host: http://localhost:37781 
Content-Type: application/json 
... 
Content-Length: 42 

{"b": true,"comments": "Comments go here"} 

這個動作:

[Route("api/myapiname/{id}/{name}")] 
[HttpPut] 
public HttpResponseMessage Put(int id, string name, MyModel mymodel){...} 

應與上述要求的工作。

要強制網絡API來讀取從請求主體中的簡單類型,所述 [FromBody]屬性添加到參數。

JSON的在你的郵遞員請求將解析到一個像這樣的對象...

public class MyObject { 
    public MyModel[] MyModel {get; set;} 
} 

所以,你要麼需要改變你的要求,以配合您所定義的動作或改變你的行動,以配合請求

[Route("api/myapiname/{id}/{name}")] 
[HttpPut] 
public HttpResponseMessage Put(int id, string name, MyObject mymodel){...} 
+0

感謝您的幫助。 我改變了郵遞員請求正文:{「b」:true,「評論」:「評論去這裏」}但當我使用VS調試代碼對象顯示它的屬性與默認值/ null,而不是值從郵差傳遞。 我試着添加[FromBody]屬性,這也沒有幫助。 – Laura

+0

忽略我最後的評論,我指定了不正確的參數名稱。它現在在工作,非常感謝。 – Laura