[FromRoute]
和[FromBody]
Web API 之间的区别是什么?
[Route("api/Settings")]
public class BandwidthController : Controller
{
// GET: api/Settings
[HttpGet]
public IEnumerable<Setting> GetSettings()
{
return _settingRespository.GetAllSettings();
}
// GET: api/Settings/1
[HttpGet("{facilityId}", Name = "GetTotalBandwidth")]
public IActionResult GetTotalBandwidth([FromRoute] int facilityId)
{
if (!ModelState.IsValid)
{
return HttpBadRequest(ModelState);
}
}
}
也适用于PUT
:
// PUT: api/Setting/163/10
[HttpPut]
public void UpdateBandwidthChangeHangup([FromRoute] int facilityId, int bandwidthChange)
{
_settingRespository.UpdateBandwidthHangup(facilityId, bandwidthChange);
}
我可以使用[FromBody]
吗?
发件人
指定应使用请求正文来绑定参数或属性。
使用FromBody
属性时,您将指定数据来自请求正文,而不是来自请求URL / URI。您不能将此属性与HttpGet
请求一起使用,而只能与PUT,POST和Delete请求一起使用。另外,您只能FromBody
在Web API中为每个操作方法使用一个属性标签(如果mvc核心中的此方法已更改,我将找不到任何支持该属性的标签)。
FromRouteAttribute
摘要:指定应使用当前请求中的路由数据来绑定参数或属性。
本质上,FromRoute
它将查看您的路由参数并基于此提取/绑定数据。路由在外部调用时通常基于URL。在Web api的早期版本中,这与相当FromUri
。
[HttpGet("{facilityId}", Name = "GetTotalBandwidth")]
public IActionResult GetTotalBandwidth([FromRoute] int facilityId)
因此,这将尝试facilityId
基于具有相同名称的route参数进行绑定。
Complete route definition: /api/Settings/GetTotalBandwidth/{facilityId}
Complete received url: /api/Settings/GetTotalBandwidth/100
根据您的最后一个问题,以下是相应的代码,假设您希望将163绑定到facilityId并将10绑定到bandageChange参数。
// PUT: api/Setting/163/10
[HttpPut("{facilityId}/{bandwidthChange}")] // constructor takes a template as parameter
public void UpdateBandwidthChangeHangup([FromRoute] int facilityId, [FromRoute] int bandwidthChange) // use multiple FromRoute attributes, one for each parameter you are expecting to be bound from the routing data
{
_settingRespository.UpdateBandwidthHangup(facilityId, bandwidthChange);
}
如果您在参数之一中包含一个复杂的对象,并且希望将其作为Http Request的主体发送,则可以在该参数上使用FromBody
代替FromRoute
。这是一个使用ASP.NET Core MVC构建您的第一个Web API的示例
[HttpPut("{id}")]
public IActionResult Update([FromRoute] string id, [FromBody] TodoItem item);
MVC Core中还有其他选项,例如FromHeader
和FromForm
和FromQuery
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句