Я передаю этот 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, но это тот случай, когда всех других аннотаций запрещены?
Хорошо, я был смущен/не думал о теле/разделении ури. Я не знаю, что такое «тело», я думаю - как я могу передать что-то (что, я думаю, считается «телом») отдельно от того, что передается в URI? Итак, теперь я задаюсь вопросом, можно ли использовать две аннотации [FromUri]; однако он работает как есть (нет аннотации на serialNum и [FromUri] для класса/объекта, поэтому это не имеет большого значения, мне просто интересно. –
«body» здесь означает тело вашего запроса. По умолчанию связующее будет смотреть на вашу строку запроса, поэтому вам не нужно украшать FromUri, если вы не хотите связывать данные из другого места, как в первом сценарии –