0

我傳遞這個URI到我的Web API服務器:[FromBody]和[FromUri]是否相互排斥?

http://localhost:28642/api/InventoryItems/PostInventoryItem?serialNum=8675309e9&ID=147&pksize=2&Description=juanValdes&vendor_id=venderado&UnitCost=2.58&UnitList=3.82&OpenQty=25.70&UPC=12349&dept=139&subdept=89&upc_pack_size=24&vendor_item=popTartz&crv_id=157 

該控制器代碼(用 「[FromBody]」 註釋)不工作:

public void PostInventoryItem([FromBody] string serialNum, [FromUri] InventoryItem ii) 
{ 
    string serNum = serialNum; 
    _inventoryItemRepository.PostInventoryItem(serNum, 
     ii.ID, ii.pksize, ii.Description, ii.vendor_id, ii.UnitCost, ii.UnitList, ii.OpenQty, 
     ii.UPC, ii.dept, ii.subdept, ii.upc_pack_size, ii.vendor_item, ii.crv_id); 
} 

...(SERIALNUM是空值);但這種(不帶 「[FromBody]」 註釋)的作用:

public void PostInventoryItem(string serialNum, [FromUri] InventoryItem ii) 
{ 
    string serNum = serialNum; 
    _inventoryItemRepository.PostInventoryItem(serNum, 
     ii.ID, ii.pksize, ii.Description, ii.vendor_id, ii.UnitCost, ii.UnitList, ii.OpenQty, 
     ii.UPC, ii.dept, ii.subdept, ii.upc_pack_size, ii.vendor_item, ii.crv_id); 
} 

(SERIALNUM是預期的 「8675309e9」)爲什麼?人們會認爲更具體的版本會起作用,但是,雖然它編譯了,但serialNum對於第一個片段是空的。

我知道您不能在一種方法中使用兩個「[FromBody]」註釋,如here所示,但所有其他註釋都不允許使用嗎?

回答

1

在你第一次執行

public void PostInventoryItem([FromBody] string serialNum, [FromUri] InventoryItem ii) 

{}

SERIALNUM的值爲空預期,因爲[FromBody]試圖尋找SERIALNUM在郵件正文中。

這是屬性的從MSDN定義:

FromBodyAttribute類

,指定一個操作參數從 傳入HttpRequestMessage的實體主體只配備一個屬性。

+0

好吧,我很困惑/沒有考慮身體/尿液分離。我不知道「身體」是什麼,我想 - 我怎麼能傳遞一些東西(我猜是被認爲是「身體」),與URI中傳遞的東西分開?所以現在我想知道是否可以使用兩個[FromUri]註釋;然而,它是按原樣工作的(serialNum上沒有註釋,而class/object是[FromUri],所以沒什麼大不了的,我只是主要好奇。 –

+1

這裏的「body」意味着你的請求的主體。默認情況下,綁定器將查看您的查詢字符串,因此您不需要使用FromUri進行修飾,除非要像第一個場景中那樣綁定來自不同位置的數據 –