使用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
转载于:https://www.cnblogs.com/caoyc/p/5677907.html
使用ASP.Net WebAPI构建REST服务(四)——参数绑定相关推荐
- 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...
- ASP.NET Core WebApi构建API接口服务实战演练
一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...
- asp.net webapi 自托管插件式服务(转)
webapi问世已久,稀里糊涂的人哪它都当mvc来使,毕竟已mvc使用级别的经验就可以应对webapi. webapi和mvc在asp.net5时代合体了,这告诉我们,其实 它俩还是有区别的,要不现在 ...
- ASP.NET Core微服务(四)——【静态vue使用axios解析接口】
ASP.NET Core微服务(二)--[ASP.NET Core Swagger配置]: 环境:win10专业版+vs2019+sqlserver2014/2019+vsCode+在线资源 boot ...
- 用ASP.NET Core构建可检测的高可用服务--学习笔记
摘要 随着现代化微服务架构的发展,系统故障的定位与快速恢复面临着诸多挑战,构建可检测的服务,帮助线上保障团队时刻掌控应用的运行状况越来越重要.本次分享会讲解如何让 ASP .NET Core 应用与现 ...
- 《深入理解 Spring Cloud 与微服务构建》第四章 Dubbo
<深入理解 Spring Cloud 与微服务构建>第四章 Dubbo 文章目录 <深入理解 Spring Cloud 与微服务构建>第四章 Dubbo 一.Dubbo 简介 ...
- 消费和部署ASP.NET WebApi服务–陷阱
我相信您已经开始使用WebApi.如果不是这样,那么当您开始时,这篇文章仍然可以为您提供帮助. 这篇文章重点介绍我在使用ASP.NET WebApi开发时遇到的一些问题以及解决这些问题的解决方案. 陷 ...
- Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务
Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务_IT_ziliang的博客-CSDN博客 WebSocket是一种在单个TCP连接上进行全双工 ...
- 蚂蚁课堂-第四期-基于springcloud构建微服务电商项目_阿里巴巴29个屌炸天的开源项目,你用过几个?附编程资料!!!...
1. 分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务 ...
最新文章
- 如果根据日志去禁用user_agent
- 使用Html5+C#+微信 开发移动端游戏详细教程 总目录
- Cesium BingMapsImageryProvider类学习
- 多线程:synchronize、volatile、Lock 的区别与用法
- 【ABAP】Native SQL
- Winform中DevExpress的TreeList的入门使用教程(附源码下载)
- oracle 11g b表空间什么情况下自动增加,Oracle 11g表空间——创建和扩展(永久)表空间...
- python 课程设计 夏敏捷_Python课程设计(微课视频版21世纪高等学校通识教育规划教材)/计算机技术入门丛书...
- GitHub建立个人网站(二)
- oracle检查完系统要求不动,w10安装oracle, 正在检查操作系统要求... 实际结果: 6.2...
- 利用计算机模拟专家给病人,《计算机应用基础2007》复习资料
- vjc机器人灰度怎么编程_求用vc++编程实现显示灰度直方图的详细步骤,越详细越好...
- 用 python 画散点图与气泡图
- IBM要推POWER9,来了解一下POWER处理器的前世今生
- 测量学—大地测量学基础
- Java入门知识点--老王笔记
- php源码网站安装教程,php源码安装教程(php源码网站搭建方法和过程)
- P1894 [USACO4.2]完美的牛栏The Perfect Stall
- 用户头像上传(自用)
- php ml 非线性回归,科学网—非线性回归(迭代法)及其两种拟合曲线:y=a+b*exp(c*x) - 梅卫平的博文...
热门文章
- 上一篇的改进!!!!!
- UNDO 表空间管理
- isecure center 综合安防管理平台_企业综合安全管理平台
- python怎么写中文至excel_Python 解决中文写入Excel时抛异常的问题
- mvc可以运行在linux下吗,asp.netmvc部署到linux(centos)
- 全国计算机等级查询系统贵州省,贵州计算机等级考试成绩查询入口
- shell(一)——概述、变量、运算符
- 3-36Pytorch与tensorboardX
- 查看linux 系统情况,LINUX 查看当前系统的负载情况
- jq中ajax请求跨域,用JQuery实现简单的Ajax跨域请求