Web API中的[FromRoute]和[FromBody]有什么区别?

user1108948:

[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中还有其他选项,例如FromHeaderFromFormFromQuery

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Web API和Web服务有什么区别?

API App和Web App有什么区别?

MVC中的Web API和REST API之间到底有什么区别?

在Azure Service Fabric中,无状态Web API和ASP.NET Core Web API之间有什么区别?

ASP.NET MVC 6中的MVC控制器和Web API控制器有什么区别?

Web API和Azure API应用之间有什么区别?

javaee-api和javaee-web-api有什么区别?

Firebase API密钥(又名服务器密钥)和Web API密钥有什么区别?

用MVC和Web API注册路由的方式之间有什么区别?

服务器端事件和 Web hook [Reverse API] 有什么区别?

Web Worker和Worker Thread有什么区别?

HTTP会话和Web会话之间有什么区别?

RPC和调用Web服务有什么区别

msdeploy和Web Deployment有什么区别?

Web容器和docker有什么区别?

微服务和Web服务有什么区别?

WCF和ASMX Web服务之间有什么区别?

Azure网站和Azure Web角色有什么区别

“经典”和“模块” Web Worker之间有什么区别?

4040和8080上的Web UI有什么区别?

Web - 定期同步和同步有什么区别?

Flutter for Web 和 for Mobile Apps 有什么区别?

Apache Web Server和Apache HTTPD有什么区别?

web.xml中的会话超时和max-age有什么区别?

在ASP.NET Core Web App中,AddJsonOptions和AddJsonFormatters有什么区别?

.Net中的App.Config和Web.Config有什么区别?

AWS beantalk中的工作层和Web层有什么区别

web3.js中的currentprovider和Givenprovider有什么区别

Gitlab CI 中的“when:manual”和“only:web”有什么区别?