[英]Calling Web API using PostAsJsonAsync
我是一個試圖調用web api方法的新手。
我有一個Quadrilateral對象:
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方法做的很簡單。 它接受一個Quadrilateral對象,並返回一個Quadrilateral的子類型,一個矩形:
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) { }
}
web api post方法如下所示:
public Quadrilateral Post(Quadrilateral q)
{
return new Rectangle(q);
}
我創建一個Quadrilateral對象,分配成員值。 然后我嘗試使用以下代碼調用我的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;
}
}
調試顯示web api post方法被命中,但Quadrilateral對象現在只包含其所有double成員的0.0。 為什么post方法沒有得到我試圖發送它的對象?
我假設您的問題現在已經解決,但可能是因為您在post方法中省略了[FromBody]
屬性。 你本可以嘗試:
public Quadrilateral Post([FromBody] Quadrilateral q)
{
return new Rectangle(q);
}
你發布的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.