使用ASP.Net WebAPI构建REST服务(四)——参数绑定
默认绑定方式
WebAPI把参数分成了简单类型和复杂类型:
- 简单类型主要包括CLR的primitive types,(int、double、bool等),系统内置的几个strcut类型(TimeSpan、Guid等)以及string。对于简单类型的参数,默认从URI中获取。
- 复杂类型的数据也可以直接作为参数传入进来,系统使用media-type formatter进行解析后传给服务函数。对于复杂类型,默认从正文中获取,
例如,对于如下函数
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 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}")]
public
string Get(int year, int month, int day)
{
return
string.Join(",", year, month, day);
}
参考文档: http://www.asp.net/web-api/overview/formats-and-model-binding
使用ASP.Net WebAPI构建REST服务(四)——参数绑定的更多相关文章
- 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...
- 使用ASP.Net WebAPI构建REST服务(三)——返回值
Asp.Net WebAPI服务函数的返回值主要可以分为void.普通对象.HttpResponseMessag.IHttpActionResult e四种,本文这里简单的介绍一下它们的区别. 一.返 ...
- 使用ASP.Net WebAPI构建REST服务(六)——Self-Host
Asp.Net WebAPI生成的是一个程序集,并不是独立的进程,因此,要运行的时候必须将其承载在相应的宿主上,一般比较常见的是IIS承载.很多时候,我们为了简化部署或者功能集成,需要将其承载到独立的 ...
- 使用ASP.Net WebAPI构建REST服务(二)——路由
REST并没有像传统的RPC服务那样显式指定了服务器函数的访问路径,而是将URL根据一定的规则映射为服务函数入口,这个规则就称之为路由.Asp.Net WebAPI的路由方式和Asp.Net MVC是 ...
- 使用ASP.Net WebAPI构建REST服务(五)——客户端
WebAPI是标准的Http协议,支持Http协议的客户端(如浏览器)都可以访问.但是,有的时候我们如果想在自己的程序中使用WebAPI时,此时就要实现自己的客户端了.我之前介绍过在.Net 4.5中 ...
- 使用ASP.Net WebAPI构建REST服务(七)——调试工具
由于WebAPI本身是基于HTTP协议的,在开发过程中,我们可以使用浏览器或Fiddler等HTTP工具辅助开发.与此同时,微软也提供了一些工具方便我们调试,使得开发更加简单快捷,本文就简单的介绍一下 ...
- 使用ASP.Net WebAPI构建REST服务——客户端
原文的链接:http://www.cnblogs.com/TianFang/p/3724449.html WebAPI是标准的Http协议,支持Http协议的客户端(如浏览器)都可以访问.但是,有的时 ...
- ASP.NET WebAPI构建API接口服务实战演练
一.课程介绍 一.王小二和他领导的第一次故事 有一天王小二和往常一下去上早班,刚吃完早餐刚一打开电脑没一会儿.王小二的领导宋大宝走到他的面前,我们现在的系统需要提供服务给其他内部业务系统,我看你平时喜 ...
- Springboot & Mybatis 构建restful 服务四
Springboot & Mybatis 构建restful 服务四 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务三 2 restful ...
随机推荐
- 选择列表控件的使用(PickList)
需要下载picklist.dll类库配合使用 <%@ Register TagPrefix="cc1" Namespace="PickListControl&quo ...
- JAVA入门 第五周 1多项式
1 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的 ...
- The specified child already has a parent错误
10-05 23:39:48.187: E/AndroidRuntime(12854): Caused by: java.lang.IllegalStateException: The specifi ...
- [css] 自适应布局 移动端自适应
一.宽度自适应 三列布局左右固定.中间不固定或者两列布局,左边固定右边不固定 原文链接:http://www.cnblogs.com/2050/archive/2012/07/30/2614852.h ...
- Spring MVC 之拦截器(八)
在springMVC中实现拦截器有两种方式 1.实现HandlerInterceptor接口 2.继承HandlerInterceptorAdaptor类 编写拦截器: package com.cy ...
- ListView数据显示混乱
在使用自定义ListView视图时,经常会采用重用ListView中视图的方式来提高滑动和显示效率,但是随之而来的一个问题是listview中数据经常显示混乱. 通常情况下,我们重写的方法是这样的: ...
- 深入理解JVM虚拟机-2垃圾收集器
这里讨论的收集器基于JDK 1.7 Update 14之后的HotSpot虚拟机. 如果两个收集器之间存在连线,说明可以搭配使用.虚拟机所处的区域,则表示它是属于新生代收集器还是年老代收集器.在这里我 ...
- 例题:for循环迭代法。一个棋盘有n个格子,第一个格子有一粒米,第二个格子有两粒米,第三个格子有四粒米,依次类推,第n个格子里有多少粒米,棋盘里一共有多少粒米。
decimal a = 1;//定义初始值,decimal可以定义比较长的数值 decimal sum = 1; Console.WriteLine(&qu ...
- maven 添加支持编译jdk1.7
1.在<profiles>元素内增加如下内容 <profile> <id>jdk17</id> <activation> ...
- 使用Objective-C的文档生成工具
前言 做项目的人多了,就需要文档了.今天开始尝试写一些项目文档.但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.象Java语言本身就自带javadoc命令,可以从源码中抽取文档.今 ...