2015-11-04 32 views
1

我正在使用web-api 2和郵遞員休息客戶端進行測試。對象不能正確解碼請求與網頁api

我有它看起來像這樣的方法定義:

[Route("api/bob/user")] 
[HttpPut] 
public IHttpActionResult UpdateUser(User user) 

用戶對象看起來像這樣:

public class User : IUser 
{ 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
} 

public interface IUser 
{ 
    string Firstname { get; set; } 
    string Lastname { get; set; } 
} 

在郵遞員我已經設置一個放置請求和內容類型設置爲JSON(application/json)我在主體中指定了以下原始數據:

{ 
    "user": {"Firstname":"Bob","Lastname":"Smith"} 
} 

當我發送請求檢測到對象類型但沒有填充任何屬性(它們全都爲空),導致我認爲反序列化失敗。

如果我將方法簽名更改爲對象,則獲取json字符串並將其反序列化爲用戶對象。如果可能,我更喜歡強打字。

我webapiconfig看起來是這樣的:

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(
            new MediaTypeHeaderValue("text/html")); 

config.MapHttpAttributeRoutes(); 

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}/{action}", 
    defaults: new {id = RouteParameter.Optional}); 

我還添加了測試客戶端的截圖:

content type shown

+1

您在請求中使用了「Content-Type:application/json」嗎? –

+0

也可以嘗試在「用戶用戶」之前添加「[FromBody]」屬性 – MajkeloDev

+0

是的,我是郵差有這個集合我已經添加了一個屏幕快照來顯示這個。 –

回答

5

你不應該在把user財產。您的JSON應如下所示:

{ 
    "Firstname": "Bob", 
    "Lastname": "Smith" 
} 

爲了讓模型綁定器綁定到模型。

如果你希望去與你目前的JSON,你User模型應該看起來像

public class User { 
    public User User { get; set; } 
} 

還要確保您使用application/json作爲內容類型。

+1

* facepalm *,你是對的,只要SO讓我接受。對於那些不明白答案的人來說,json中的對象不是用戶類型,所以序列化失敗。 –