我有一個POST方法,需要一個值類的其餘部分不變MVC4的Web API項目有一個簡單的ASP.Net的Web API控制器。當我做:ASP.Net的Web API模型構造綁定 - 錯誤的構造函數被調用
POST/API /值與身體{名稱: 「somename」}
的值()構造函數被調用,而不是值(字符串名稱)之一。通常,這不是問題,因爲Name屬性會有一個公共集合,並且Web API將在構建後調用它。在這種情況下它是私有的,所以我得到了一個默認的值實例。
如果我刪除值(INT)構造函數,然後它調用值(字符串)構造函數。
是否有一個原因ModelBinding不選擇具有name參數的構造函數?
這裏的示例代碼:
using System.Web.Http;
namespace WebAPIPlayground.Controllers
{
public class ValuesController : ApiController
{
public void Post(Values value)
{
var a = value.ID; // == 0
var b = value.Name; // == null
}
}
public class Values
{
public int ID { get; private set; }
public string Name { get; private set; }
private Values() { }
public Values(int id) { ID = id; }
public Values(string name) { Name = name; }
}
}
我已經看了看:許多其他網站中Routing and Action Selection和WebAPI Parameter binding under the hood,但我不明白這種行爲。
我不知道很多關於這一點,但你要求它應該叫不具有相同的方法簽名爲您的POST主體構造函數(你沒有提供一個'int'參數)。 –
@RobertHarvey感謝沒收。它本不應該在那裏。這是我在發佈之前嘗試的最後一件事情之一。 – Jerry