2015-10-06 116 views
0

我有一個ASPNET的WebAPI 2項目,並在控制器我有兩個動作的WebAPI複雜對象返回空

public IHttpActionResult Get([FromUri] Company company) 
{ 
    //code 
} 

另:

[HttpGet] 
[Route("api/company/quantity")] 
public IHttpActionResult Count([FromUri] Company company) 
{ 
     //code 
} 

Company類:

public class Company 
    { 
    public Company() 
    { 
     Name = ""; 
     //Set default value to all properties 
    } 
    public string Name {get;set;} 
    //othger string properties 
    } 

如果我訪問第一個方法獲取與此uri:// localhost/api/company/一切正常,Company對象實例化爲默認值。

但如果我嘗試訪問第二個方法與此URI字數://本地主機/ API /公司/數量方法被擊中,但Company對象爲null。

怎麼了?

+0

添加DataContract和DataMember屬性到公司不能傳似類一個複雜的對象類。 – lcryder

回答

1

您需要更改第二種方法的路線屬性並將公司放入括號中。

[HttpGet] 
[Route("api/{company}/quantity")] 
public IHttpActionResult Count([FromUri] Company company) 
{ 
    //code 
} 

但是,你是否試圖通過URL傳遞一個複雜的對象?您可以更好地切換到POST/PUT方法並從請求主體綁定對象。

+0

是的,但它不是我自己的項目,只是在做它,生病試圖稍後改變它。 – gog

+0

該公司也是控制器的名稱。問題在於,在第一種方法(Get(公司公司))中,公司構造函數在動作之前被擊中,所以它帶有默認值。但在第二種方法(Count(公司公司))中,公司構造函數沒有命中,所以對象爲空。在這兩種情況下,我都不會在URL中傳遞任何東西。 – gog

+0

我們不應該僅僅因爲我們試圖「傳遞一個複雜的對象」而使用POST。 REST語義應該受到尊重:如果我們試圖獲取某些東西,我們不應該使用POST來獲取它。 POST意味着更改狀態,GET意味着檢索信息。 – rsenna

0

使用HTTPGET的方式發送被改變動詞POST或放和發送的對象一個身體HTTP請求的

+0

是的,但爲什麼在第一種方法中起作用?它也是動詞。 – gog