默认绑定方式

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服务(四)——参数绑定相关推荐

  1. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例

    由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...

  2. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

  3. asp.net webapi 自托管插件式服务(转)

    webapi问世已久,稀里糊涂的人哪它都当mvc来使,毕竟已mvc使用级别的经验就可以应对webapi. webapi和mvc在asp.net5时代合体了,这告诉我们,其实 它俩还是有区别的,要不现在 ...

  4. ASP.NET Core微服务(四)——【静态vue使用axios解析接口】

    ASP.NET Core微服务(二)--[ASP.NET Core Swagger配置]: 环境:win10专业版+vs2019+sqlserver2014/2019+vsCode+在线资源 boot ...

  5. 用ASP.NET Core构建可检测的高可用服务--学习笔记

    摘要 随着现代化微服务架构的发展,系统故障的定位与快速恢复面临着诸多挑战,构建可检测的服务,帮助线上保障团队时刻掌控应用的运行状况越来越重要.本次分享会讲解如何让 ASP .NET Core 应用与现 ...

  6. 《深入理解 Spring Cloud 与微服务构建》第四章 Dubbo

    <深入理解 Spring Cloud 与微服务构建>第四章 Dubbo 文章目录 <深入理解 Spring Cloud 与微服务构建>第四章 Dubbo 一.Dubbo 简介 ...

  7. 消费和部署ASP.NET WebApi服务–陷阱

    我相信您已经开始使用WebApi.如果不是这样,那么当您开始时,这篇文章仍然可以为您提供帮助. 这篇文章重点介绍我在使用ASP.NET WebApi开发时遇到的一些问题以及解决这些问题的解决方案. 陷 ...

  8. Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务

    Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务_IT_ziliang的博客-CSDN博客 WebSocket是一种在单个TCP连接上进行全双工 ...

  9. 蚂蚁课堂-第四期-基于springcloud构建微服务电商项目_阿里巴巴29个屌炸天的开源项目,你用过几个?附编程资料!!!...

    1. 分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务 ...

最新文章

  1. 如果根据日志去禁用user_agent
  2. 使用Html5+C#+微信 开发移动端游戏详细教程 总目录
  3. Cesium BingMapsImageryProvider类学习
  4. 多线程:synchronize、volatile、Lock 的区别与用法
  5. 【ABAP】Native SQL
  6. Winform中DevExpress的TreeList的入门使用教程(附源码下载)
  7. oracle 11g b表空间什么情况下自动增加,Oracle 11g表空间——创建和扩展(永久)表空间...
  8. python 课程设计 夏敏捷_Python课程设计(微课视频版21世纪高等学校通识教育规划教材)/计算机技术入门丛书...
  9. GitHub建立个人网站(二)
  10. oracle检查完系统要求不动,w10安装oracle, 正在检查操作系统要求... 实际结果: 6.2...
  11. 利用计算机模拟专家给病人,《计算机应用基础2007》复习资料
  12. vjc机器人灰度怎么编程_求用vc++编程实现显示灰度直方图的详细步骤,越详细越好...
  13. 用 python 画散点图与气泡图
  14. IBM要推POWER9,来了解一下POWER处理器的前世今生
  15. 测量学—大地测量学基础
  16. Java入门知识点--老王笔记
  17. php源码网站安装教程,php源码安装教程(php源码网站搭建方法和过程)
  18. P1894 [USACO4.2]完美的牛栏The Perfect Stall
  19. 用户头像上传(自用)
  20. php ml 非线性回归,科学网—非线性回归(迭代法)及其两种拟合曲线:y=a+b*exp(c*x) - 梅卫平的博文...

热门文章

  1. 上一篇的改进!!!!!
  2. UNDO 表空间管理
  3. isecure center 综合安防管理平台_企业综合安全管理平台
  4. python怎么写中文至excel_Python 解决中文写入Excel时抛异常的问题
  5. mvc可以运行在linux下吗,asp.netmvc部署到linux(centos)
  6. 全国计算机等级查询系统贵州省,贵州计算机等级考试成绩查询入口
  7. shell(一)——概述、变量、运算符
  8. 3-36Pytorch与tensorboardX
  9. 查看linux 系统情况,LINUX 查看当前系统的负载情况
  10. jq中ajax请求跨域,用JQuery实现简单的Ajax跨域请求