2014-10-22 91 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); 
}