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

向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] 

    • 通常用来推断IFormFileIFormFileCollection类型的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 搜索 

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

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

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

 

但需要注意的是: 

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

360浏览器linux版本_360安全浏览器崩溃解决方案

360安全浏览器崩溃解决方案方案一:打开360安全浏览器,按键盘上的F1调出浏览器医生界面,点击一键修复即可。如图所示:方案二:360浏览器打开了太多标签占用内存,并且随着浏览器开着的时间越长,占用…

.NET 开源软件开发BIM工具包xBIM

一、xBIM 简介BIM(Building Information Modelling)建筑信息模型,xBIM(eXtensible Building Information Modelling)可扩展的建筑信息模型。它是一个.NET 开源软件开发BIM工具包,支持BuildingSmart数据模型…

< meta name=“viewport“ content=“width=device-width, initial-scale=1.0“>的解释

< meta name“viewport” content“widthdevice-width, initial-scale1.0”> meta是html语言head区的一个辅助性标签&#xff0c;位于文档的头部&#xff0c;不包含任何内容 标签的属性定义了与文档相关的名称/值对 meta元素可提供相关页面的元信息&#xff0c;比如针对…

<meta name=“robots“ content=“index,follow“>的解释

为了让搜索引擎禁止抓取本页面 此标签必须放在< head >和< /head >之间 content中的值决定允许抓取的类型&#xff0c;必须同时包含两个值&#xff1a;是否允许索引&#xff08;index&#xff09;和是否跟踪链接&#xff08;follow&#xff0c;也可以理解为是否允…

2019(dotNet全栈开发)公众号回顾

2019年已经过去&#xff0c;人口红利已经逐渐消失&#xff0c;也许这是这10年互联网史上最糟糕的一年&#xff0c;也可能这是未来10年互联网史上最好的一年关于公众号&#xff0c;我其实很早就开始注册了&#xff0c;只是一直没怎么运营&#xff08;ps&#xff1a;不知道怎么推…

CSS padding margin border属性讲解

把所有网页上的对象都放在一个盒&#xff08;box&#xff09;中 &#xff0c;设计师可以通过创建定义来控制这个盒的属性&#xff0c;这些对象包括段落、列表、标题、图片以及层。 盒模型主要定义四个区域&#xff1a; 内容&#xff08;content&#xff09; 内边距&#xff08;…

laravel 模板继承_Laravel框架模板之公共模板、继承、包含实现方法分析

本文主要介绍了laravel框架模板之公共模板、继承、包含实现方法,结合实例形式分析了Laravel框架中公共模板的建立、模板包含、模板继承等相关操作技巧&#xff0c;需要的朋友可以参考下&#xff0c;具体如下&#xff1a;简介&#xff1a;利用laravel框架开发后台管理系统或web站…

css表格表单属性

表格标签 table表格 属性&#xff1a; border 边框属性 值 数字 width 宽度 值 数字 height 高度 值 数字 cellpadding单元格的内容到单元格边的距离 cellspacing单元格和单元格之间的间距 align规定表格水平如何摆放 值 left/center/right tr行 属性&#xff1a; height 高度…

2019 amazingdotnet 公众号回顾

2019 精彩文章汇总Intro新的一年了&#xff0c;把去年的精彩文章汇总一下&#xff0c;希望能对大家有所帮助博客园推荐文章asp.net core 3.0 更新简记asp.net core 从单机到集群动手造轮子&#xff1a;实现一个简单的 EventBusasp.net core 3.0 中使用 swaggerasp.net core 自定…

echarts字变大_在echarts中如何调整lable的字体大小?

波斯汪series[i]-pie.data[i].label.normal.textStyle.fontSize透過設定 fontSize 就可以調整大小了, 你可以參考 官網的範例, 手動修改左側欄 label 的 fontSize 看看, 是可以調整大小的.文檔在此用 legend.textStyle.fontSize 更改示例大小用 itemStyle.normal.label.textSty…

Identifiers in Java(Java标识符)

Identifiers&#xff08;标识符&#xff09; in Java are symbolic(符号化) names used for identification. They can be a class name, variable name, method name, package name, constant&#xff08;常量&#xff09; name, and more. However, In Java, There are some …

【实战 Ids4】║ 客户端、服务端、授权中心全线打通!

1、经过元旦两天的全力整改&#xff0c;终于在这新的一年&#xff0c;完成了我的布道生涯的第一个大步走 —— 那就是客户端&#xff08;VUE&#xff09;、服务端&#xff08;ASP.NET Core API&#xff09;、授权中心&#xff08;IdentityServer4&#xff09;的大融合&#xff…

补丁 检测系统_大云制造 | BCLinux For ARM64 V7.6操作系统正式发布

友情提示&#xff1a;全文3000多文字&#xff0c;预计阅读时间10分钟概述大云企业操作系统(BC-Linux&#xff0c;BigCloud Enterprise Linux)是中移(苏州)软件技术有限公司借助开源社区优势&#xff0c;通过定制化手段研发的高性能、安全可靠、自主可控的企业级Linux操作系统。…

告别2019,写给2020:干好技术,要把握好时光里的每一步

本文来自&#xff1a;长沙.NET技术社区 邹溪源不知不觉&#xff0c;一晃年关将近&#xff0c;即将翻开2019&#xff0c;进入新的一页。&#xff08;本文写于2019年12月27日&#xff09;这周已经在朋友圈看到了来自公众号《恰同学少年》《Edi.Wang》和《吃草的罗汉》几位老师写下…

Java | Assignment Statements Expressions

An assignment statement designates a value for a variable. An assignment statement&#xff08;赋值语句&#xff09; can be used as an expression&#xff08;赋值表达式&#xff09; in Java. In Java, an assignment statement is an expression that evaluates a v…

单片机课程设计数字心率计_如何选购合适的PH计

聚舟供应的PH计PH计已经被广泛应用于各个行业&#xff0c;如工业、电力、农业、医药、食品、科研和环保等领域&#xff0c;在酸碱值检测时必不可少的&#xff0c;那么该如何选购呢&#xff1f;聚舟销售的PH计也有多种样式与型号&#xff0c;各种型号都供应充足&#xff0c;欢迎…

cd返回上一 git_如何使用Git实现自动化部署你的项目

在开发过程中&#xff0c;我们不可避免的会用到版本控制。你可能对 Git 和 SVN 有所了解。一开始基本都是在用SVN&#xff0c;现在可能都进化到用Git了吧&#xff0c;因为SVN缺点比较多。这里就不过于多的介绍Git的优点了。不知道大家一开始是怎么使用 git 进行开发的&#xff…

java(i++和++i的理解)

在后&#xff1a;先赋值再自身加1 在前&#xff1a;先自身加1再赋值 1.What is i printed? A public class Test {public static void main(String[] args) {int j 0;int i j j * 5;System.out.println("What is i? " i);}}A.6 B.1 C.0 D.5 2.What is y dis…

在Asp.Net Core中使用ModelConvention实现全局过滤器隔离

从何说起这来自于我把项目迁移到Asp.Net Core的过程中碰到一个问题。在一个web程序中同时包含了MVC和WebAPI&#xff0c;现在需要给WebAPI部分单独添加一个接口验证过滤器IActionFilter&#xff0c;常规做法一般是写好过滤器后给需要的控制器挂上这个标签&#xff0c;高级点的做…

Linux 用户和组

用户和组 1.新建用户组:cs se //新建文件夹 mkdir pub mkdir cs mkdir se //新建组 groupadd cs groupadd se //此时&#xff0c;root创建好需要的目录和组&#xff0c;所以目录属主和组都标记为root //chown(change owner)命令用于设置文件所有者和文件关联组的命令 //chown…