2012-09-11 34 views
36

我有以下的Web API(GET):如何開發ASP.NET Web API以接受複雜對象作爲參數?

public class UsersController : ApiController 
{ 
    public IEnumerable<Users> Get(string firstName, string LastName, DateTime birthDate) 
    { 
     // Code 
    } 
} 

這是一個GET,這樣我就可以這樣調用:

http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01 

和接收的用戶(一個或多個)XML結果。

是否有可能封裝參數,一類是這樣的:

public class MyApiParameters 
{ 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public DateTime BirthDate {get; set;} 
} 

然後有:

public IEnumerable<Users> Get(MyApiParameters parameters) 

我已經嘗試過了,只要我嘗試從http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01導致,parameter爲空。

回答

62

默認情況下,從正文中讀取複雜類型,這就是爲什麼您會收到空值。

,如果你想模型綁定拉從查詢字符串模型的動作簽名更改爲

public IEnumerable<Users> Get([FromUri]MyApiParameters parameters) 

你可以閱讀更多有關Web API怎麼做由Mike失速從MSFT的優秀文章在參數綁定 - http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

+0

尼斯漁獲物。我知道我錯過了一些東西! :) – Tohid

+0

這似乎咬我每次我回到Web API開發。我希望Swashbuckle會做一些事情來確保它和Web API與他們對這些數據是否作爲查詢字符串數據或正文數據來過/去的假設保持同步。我希望Web API不會假設在GET調用時從Body上讀取了複雜類型 - 這是毫無意義的,特別是不作爲默認值。謝謝Tohid和@Filip--這個問題爲我節省了無數次! – Jaxidian

相關問題