使用ASP.Net WebAPI构建REST服务(四)——参数绑定

时间:2014-05-10 18:17:53   收藏:0   阅读:576

默认绑定方式

WebAPI把参数分成了简单类型和复杂类型:

例如,对于如下函数

    HttpResponseMessage Put(int id, Product item)

其id默认从url中获取,其item默认从正文中获取。

 

使用 [FromUri] 标记从URI中绑定参数

我们可以使用 [FromUri] 标记强制从URI中绑定参数,例如

    publicclassGeoPoint
    {
        publicdouble Latitude { get; set; }
        publicdouble Longitude { get; set; }
    }

    publicValuesController : ApiController
    {
        publicHttpResponseMessage Get([FromUri] GeoPoint location) { ... }
    }

这样,Get参数就是从URI中获取了。需要注意的是,此时我们必须将GeoPoint的属性在URI中传入: http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989 。这种默认的序列化方式比较冗长,我们也可以自定义反序列化格式为类似这样的形式:http://localhost/api/values/?location=47.678558,-122.130989具体方法请参看参考文档 Type Converters 的一节。

 

使用 [FromBody] 标记从正文中绑定参数

同样,我们可以使用 [FromBody] 标记强制从正文中绑定参数,例如

    publicHttpResponseMessage Post([FromBody] string name)

此时,我们则

    POST http://localhost:5076/api/values HTTP/1.1
    User-Agent: Fiddler
    Host: localhost:5076
    Content-Type: application/json
    Content-Length: 7

    "Alice"

需要注意的是这儿的Content-Type必须和正文的序列化方式一致,这儿使用的是json序列化,因此类型是application/json。系统自动使用Media Formatters将其转换为目标对象。

 

绑定多个参数

前面介绍的方式中,只能从URI中绑定一个参数,虽然可以通过传入复杂类型解决多参数的问题,但很多时候不如在URI中来得直接。此时,我们则可以使用前面介绍的特性路由来实现多参的绑定,例如:

    [Route("api/{controller}/{year}/{month}/{day}")]
    publicstring Get(int year, int month, int day)
    {
        returnstring.Join(",", year, month, day);
    }

 

参考文档: http://www.asp.net/web-api/overview/formats-and-model-binding

使用ASP.Net WebAPI构建REST服务(四)——参数绑定,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!