我有兩個實體類Donor
和User
。供體是用戶的子類下面Web API參數綁定不起作用
public abstract class User {
[Key]
public long Id { get; set; }
...
}
public class Donor : User {
public string AlternateMobileNumber { get; set; }
...
}
給出如下所示的Web API控制器動作接收POST
請求使用JSON數據在主體
public class DonorsController : ApiController {
//POST: api/Donors/EditDonor
[HttpPost]
public HttpResponseMessage EditDonor([FromBody] Donor donor) {
...
}
}
這裏是交請求的樣子
POST http://localhost:xxxxx/Donor/api/Donors/EditDonor HTTP/1.1
Content-Length: 477
Cache-Control: no-cache
Content-Type: application/json;charset=UTF-8
Accept: */*
...
{"Id":12,"UserId":"[email protected]","FirstName":"firstname9c","MiddleName":"M","LastName":"lastname9","Gender":"Male","MobileNumber":"7777777777","BloodGroup":"A+ve","OfficeLocality":{"Id":2,"Name":"Malad"},"ResidenceLocality":{"Id":2,"Name":"Malad"},"Organization":"organization9","Designation":"designation9","TimesDonated":1,"DateLastDonated":"Mon Dec 01 00:00:00 GMT+05:30 2014","LastDonatedAt":"Hosp 1","IsSDPDonor":false,"IsIntrestedDonor":false,"Comments":"Some Comment"}
問題是捐助者對象是空的(不爲空,但爲空,沒有將值應用於原型捐助者)。
如果更改施主對象和使用數據傳送對象(DonorDO)具有相同屬性但沒有任何繼承,則性能被正確地填充在該數據對象。例如,捐助者數據對象如下所示。
//Plain Data Transfer Object without inheritance
public class DonorDO {
public long Id { get; set; }
public string AlternateMobileNumber { get; set; }
...
}
爲什麼DonorDO獲取其屬性值正確綁定,而捐助實體對象保持空的,沒有約束性的。它與繼承或其他問題有關嗎?
也許問題出在你的Json格式。用一些只包含Id和AlternateMobileNumber屬性的簡單Json試試吧?順便說一下,您可以刪除FromBody屬性,因爲捐助者不是原始類型,所以它會自動從主體中獲取 –
感謝您指出FromBody。我按照您的建議嘗試發送只有幾個字段而不是完整的JSON,但Donor對象的屬性值全爲空或默認值。輸入JSON中的值都不會應用於施主對象。 – Jatin
你能解決這個問題的地方? – jarz