博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用ASP.Net WebAPI构建REST服务(四)——参数绑定
阅读量:6871 次
发布时间:2019-06-26

本文共 1353 字,大约阅读时间需要 4 分钟。

默认绑定方式

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

  • 简单类型主要包括CLR的,(int、double、bool等),系统内置的几个strcut类型(TimeSpan、Guid等)以及string。对于简单类型的参数,默认从URI中获取。
  • 复杂类型的数据也可以直接作为参数传入进来,系统使用进行解析后传给服务函数。对于复杂类型,默认从正文中获取,

例如,对于如下函数

    HttpResponseMessage Put(int id, Product item)

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

 

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

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

    public class GeoPoint

    {
        public double Latitude { get; set; }
        public double Longitude { get; set; }
    }
    public ValuesController : ApiController
    {
        public HttpResponseMessage 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] 标记强制从正文中绑定参数,例如

    public HttpResponseMessage Post([FromBody] string name)

此时,我们则

    POST

    User-Agent: Fiddler
    Host: localhost:5076
    Content-Type: application/json
    Content-Length: 7
    "Alice"

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

 

绑定多个参数

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

    [Route("api/{controller}/{year}/{month}/{day}")]

    public string Get(int year, int month, int day)
    {
        return string.Join(",", year, month, day);
    }

 

参考文档:

 
 
 

 

转载地址:http://wcpfl.baihongyu.com/

你可能感兴趣的文章
向量样本【模式识别】感知器 Perceptron
查看>>
委托杂谈
查看>>
《Android内核剖析》读书笔记 第7章 理解Context
查看>>
IOS开发之UILabel动态高度设置方法
查看>>
儿子购买的书
查看>>
让Android中的webview支持页面中的文件上传
查看>>
hbase regionserver挂掉的问题
查看>>
延迟段创建的学习-实验
查看>>
C/C++ 内存对齐
查看>>
php 在函数内引用全局变量 讲解引用
查看>>
数据结构和算法系列1 线性表之顺序表
查看>>
项目经理的指导
查看>>
android蓝牙开发---与蓝牙模块进行通信
查看>>
HDU 3537 Daizhenyang's Coin(博弈,翻硬币)
查看>>
数据结构和算法系列5 七大排序之冒泡排序和快速排序
查看>>
2013年8月3日第31周六
查看>>
Android使用隐藏api的方法(使用被@hide的api)
查看>>
Robert Penner's Easing Functions
查看>>
Parallel for loops in .NET C# z
查看>>
mysql alter修改字段的长度 类型sql语句
查看>>