向Web API传递参数

数据可以通过多种方式来传给API。

Binding Source Attributes 会告诉 Model 的绑定引擎从哪里找到绑定源。

共有以下六种 Binding Source Attributes:

  • [FromBody]

    • 请求的 Body

  • [FromForm]

    • 请求的 Body 中的 form数据

  • [FromHeader]

    • 请求的 Header

  • [FromQuery]

    • Query string 参数

  • [FromRoute]

    • 当前请求中的路由数据

  • [FromService]

    • 作为 Action 参数而注入的服务

例如:

或:

默认情况下ASP.NET Core 会使用 Complex Object Model Binder,它会把数据从Value Providers那里提取出来,而Value Providers的顺序是定义好的。

但是我们构建API时通常会使用 [ApiController] 这个属性,为了更好的适应API它改变了上面的规则。更改后的规则如下:

  • [FromBody]

    • 通常是用来推断复杂类型参数的。

  • [FromForm]

    • 通常用来推断IFormFile和IFormFileCollection类型的Action参数。

  • [FromRoute]

    • 用来推断Action的参数名和路由模板中的参数名一致的情况。

  • [FromQuery]

    • 用来推断其它的Action参数。

按照这些规则,在Action的参数前面使用这些属性,就可以避免让我们手动去寻找绑定源。当默认的行为规则需要被重写的时候,也可以使用这些 Binding Source Attributes。

过滤

过滤集合的意思就是指根据条件限定返回的集合。

例如我想返回所有类型为国有企业的欧洲公司。则URI为:GET /api/companies?type=State-owned&region=Europe

所以过滤就是指:我们把某个字段的名字以及想要让该字段匹配的值一起传递给API,并将这些作为返回的集合的一部分。

搜索

针对集合进行搜索是指根据预定义的一些规则,把符合条件的数据添加到集合里面。

搜索实际上超出了过滤的范围。针对搜索,通常不会把要匹配的字段名传递过去,通常会把要搜索的值传递给API,然后API自行决定应该对哪些字段来查找该值。经常会是全文搜索。

例如:GET /api/companies?q=xxx

过滤 vs 搜索

可以看出来过滤和搜索是不同的。

过滤:首先是一个完整的集合,然后根据条件把匹配/不匹配的数据项移除。

搜索:首先是一个空的集合,然后根据条件把匹配/不匹配的数据项往里面添加。

但需要注意的是:

过滤和搜索这些参数并不是资源的一部分。

只允许针对资源的字段进行过滤。

该系列配套视频请点击原文链接。

使用ASP.NET Core 3.x 构建 RESTful API - 4.2 过滤和搜索相关推荐

  1. 使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API

    1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作 什么是REST REST一词最早是在2000年,由Roy Fielding在他的博士论文<Archit ...

  2. 使用ASP.NET Core 3.x 构建 RESTful API - 1. 开始

    以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 预备知识:ASP.NET Core 和 C# 工具:Visual Studio 2019最新版(VSCod ...

  3. 使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商

    现在,当谈论起 RESTful Web API 的时候,人们总会想到 JSON.但是实际上,JSON 和 RESTful API 没有半毛钱关系,只不过 JSON 恰好是RESTful API 结果的 ...

  4. 使用ASP.NET Core 3.x 构建 RESTful API - 3.1 API资源命名

    为了与RESTful API进行交互,API消费者需要使用到三个概念: 资源的标识.也就是可以找到资源的URI. HTTP方法.例如GET,POST等等,这些方法是HTTP协议的一部分. 有效载荷(可 ...

  5. 使用ASP.NET Core 3.x 构建 RESTful API - 3.3.3 ProblemDetails

    当ASP.NET Core 大约在 2.1 版本的时候,它引入了 ProblemDetails.ProblemDetails是基于 RFC7807 这个规范,目的是让 HTTP 响应可以携带错误的详细 ...

  6. 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 路由

    路由机制会把一个请求的URI映射到一个Controller上面的Action,所以当你发送一个HTTP请求的时候,MVC框架会解析这个请求的URI,并尝试着把它映射到一个Controller上面的Ac ...

  7. 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action

    Demo 下面我们就来实践一下.打开之前的项目,并建立CompaniesController: 这里有6个地方比较关键,我们挨个看一下: RESTful API 或者其它Web API的Control ...

  8. 使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model

    Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的. 而面向外部的 model 则表示了要传输的东西.这类 model 有时候叫做 Dto,有时 ...

  9. 使用ASP.NET Core 3.x 构建 RESTful API - 4.3 HTTP 方法的安全性和幂等性

    什么样的HTTP方法是安全的? 如果一个方法不会改变资源的表述,那么这个方法就被认为是安全的. 例如 HTTP GET 和 HTTP HEAD 就被认为是安全的,但需要注意的是,这并不意味着执行GET ...

最新文章

  1. sql Escape用法
  2. ACE反应器(Reactor)模式
  3. sessionkey 微信小程序获取_微信小程序获取sessionkey,Connection reset
  4. 排序类.不管什么类型都能排
  5. Sudoku Solver
  6. 常见电脑病毒及解决措施
  7. 【设计鉴赏】超美的墨汁喷溅字体
  8. 服务器lsass系统错误,急急急开机出现lsass.exe系统错误系统资源不够无法完成AP? 爱问知识人...
  9. 纯CSS下拉导航代码
  10. 启用视口着色:在视图窗口实时显示灯光照明效果_daiding
  11. Nacos安装讲解教程
  12. 2017最新淘宝高转化详情页排版技巧(转载)
  13. 华为路由器接口如何区分_华为路由器的usb接口是什么意思
  14. G - 数字转换 LibreOJ - 10155
  15. Web中的HTML、css、jQuery、js
  16. HTTP引流工具Gor快速入门
  17. 打开APPStore跳转到指定APP
  18. 如何除去暴风影音的左上边广告和下角动态广告
  19. 全球10大智慧港口介绍
  20. ECU-TEST笔记使用技巧01

热门文章

  1. C#操作Excel文件暨C#实现在Excel中将连续多列相同数据项合并
  2. linkButton与Button 的click事件与onclientClick事件
  3. 什么叫内部银团_什么是紫钛晶?紫钛晶是不是天然水晶?
  4. centos 初学者_初学者:如何在Outlook 2013中创建和管理任务
  5. javascriptjquery 判断滚动到页面底部
  6. Python统计列表中的重复项出现的次数的方法
  7. java dateTime + long
  8. MySQL查询,按拼音首字母排序
  9. kernel shell bash简介
  10. crontab执行shell脚本日志中出现乱码