2014-10-22 90 views
3

我是一個嘗試調用Web API方法的新手。使用PostAsJsonAsync調用Web API

我有一個四邊形對象:

public class Quadrilateral 
{ 
    public double SideA { get; private set; } 
    public double SideB { get; private set; } 
    public double SideC { get; private set; } 
    public double SideD { get; private set; } 

    public double AngleAB { get; private set; } 
    public double AngleBC { get; private set; } 
    public double AngleCD { get; private set; } 
    public double AngleDA { get; private set; } 

    public virtual string Name { get { return "Generic Quadrilateral"; } } 
    public virtual string Description { get { return "A quadrilateral that has no specific name for its shape"; } } 

    public Quadrilateral(double sideA, double sideB, double sideC, double sideD, 
         double angleAB, double angleBC, double angleCD, double angleDA) 
    { 
     SideA = sideA; 
     SideB = sideB; 
     SideC = sideC; 
     SideD = sideD; 
     AngleAB = angleAB; 
     AngleBC = angleBC; 
     AngleCD = angleCD; 
     AngleDA = angleDA; 
    } 

} 

我的Web API POST方法確實很簡單的東西。它接受一個四邊形對象,並返回四邊形,矩形的子類型:

public class Rectangle : Quadrilateral 
{ 
    public override string Name { get { return "Rectangle"; } } 

    public override string Description { get { return "A quadrilateral with equal opposite sides and 4 right angles"; } } 

    public Rectangle(Quadrilateral q) : 
     base(q.SideA, q.SideB, q.SideC, q.SideD, 
      q.AngleAB, q.AngleBC, q.AngleCD, q.AngleDA) { } 

} 

網絡API post方法看起來像這樣:

public Quadrilateral Post(Quadrilateral q) 
{ 
    return new Rectangle(q); 
} 

我創建一個四邊形的對象,分配部件的值。然後我嘗試使用下面的代碼來調用我的Web API:

readonly string baseUri = "http://localhost:43798/"; 
readonly string controller = "api/quadrilateral"; 

using (HttpClient client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri(baseUri); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    HttpResponseMessage response = await client.PostAsJsonAsync(controller, quadrilateral); 

    if (response.IsSuccessStatusCode) 
    { 
     return await response.Content.ReadAsAsync<Quadrilateral>(); 
    } 
    else 
    { 
     return null; 
    } 
} 

調試表明,網頁API POST方法被擊中,但四邊形對象現在只包含0.0所有的double成員。爲什麼post方法沒有得到我想要發送的對象?

+0

它可能與返回的JSON不匹配到您的'Quadrilateral'類。你可以發佈返回的JSON嗎? – 2014-10-22 08:14:01

+0

我是JSON的新手。我該如何去捕獲調用者和web api方法之間的JSON消息? – pzyktzle 2014-10-24 02:58:49

回答

0

你發佈的json值是什麼?你確定在發佈之前得到正確的json嗎?

嘗試清除接受頭,

client.BaseAddress = new Uri(baseUri); 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
HttpResponseMessage response = await client.PostAsJsonAsync(controller, quadrilateral); 
+2

沒有沒有幫助。我是JSON的新手。我該如何去捕獲調用者和web api方法之間的JSON消息? – pzyktzle 2014-10-24 02:59:39

1

我假設你的問題現在解決了,但它可能是因爲你忽略你的POST方法[FromBody]屬性。您可以嘗試:

public Quadrilateral Post([FromBody] Quadrilateral q) 
{ 
    return new Rectangle(q); 
}