上一篇文章帮助大家解决问题不彻底导致博友使用的时候还是遇到一些问题,欢迎一起讨论。
所以下面重点详细讲解我们常用的Get和Post请求( 以.net core2.2的Http[Verb]为方向 ,推荐该属性路由),如果想验证,直接利用VS2017创建ASP.NET Core API (.net core 2.2),在DefaultController里面操作。文中有些关键字,我是加了粗的,请注意一下。

帮助回忆,Get和Post区别?

  1. get参数通过url传递,post放在request body中。

  2. get请求在url中传递的参数是有长度限制的,而post没有。

  3. get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。

  4. get请求只能进行url编码,而post支持多种编码方式。

  5. get请求浏览器会主动cache,而post不会。

  6. get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。

  7. get和post质上就是tcp链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

  8. get产生一个tcp数据包;post产生两个tcp数据包。对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于post,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

在做数据查询时,建议用get方式;而在做数据添加、修改或删除时,建议用post方式;

Get请求

无参请求

1)默认方式

什么是默认方式呢?就是你整个Controller里面只有唯一一个HttpGet请求方式,请求路径:api/[controller] 。代码如下图:



如果有两个呢?如下图以及前端页面返回异常结果:



返回结果提示有多个匹配项并报出异常,这个是为啥?明明两个方法名都不一样。 其实是:当我们利用VS2017 .net core生成API项目时,ASP.NET Core API项目默认使用属性路由, 不是传统路由。传统路由会根据Url地址去匹配方法Action。

微软:生成 REST API 时,支持使用 Http[Verb] 属性的属性路由 (就是本文所阐述的内容),并且很少会在操作方法上使用 [Route(...)]。 建议使用更特定的 Http[Verb] Attributes 来明确 API 所支持的操作。 REST API 的客户端需要知道映射到特定逻辑操作的路径和 Http 谓词。(个人觉的 Http[Verb] 属性路由比 Route属性路由简洁

2)路由模板设置

但现实是,我的Controller里面不可能只有一个httpGet方法,怎么办?引出路由模板的概念

如下图,可以看到httpGet属性提供了一个路由模板设计,两个可选的。template意思是新的路由模板,Name可以new 一个新的HttpGetAttribute,Order是可以设置请求处理顺序



对应进行设置,及相应结果如下:

有参请求

1)默认方式

如果是单单利用id去获取一条数据,利用如下图所示就可以达到,此种方式请求路径操作简单,访问路径:api/values/id,大括号里面的{}名称必须和参数名保持一致



如上所示不能满足get的多个参数请求方式,如果有多个参数又要使用get请求,就要回到老套路,如下图所示

2)路由模板设置

同样,新路由模板携带方便请求的简约参数nameid就行,大括号里面的{}名称必须和参数名保持一致

如上图不能满足新路由模板get的多个参数请求方式,如果有多个参数又要使用get请求,就要回到老套路,如下图所示

Post请求

### 无参请求
#### 1)默认方式
如下图所示,由于请求路径是/api/values,所以整个controller会寻找Post请求
请求路径:/api/[controller]
![](https://img2018.cnblogs.com/blog/710776/201901/710776-20190123140523791-1398100846.png)
但是如果此时有另外一个Post方法,又没有重命名新的模板,无论是有没有参数,都会报错的。因为api/values请求路径只会去找POST请求方式。所以要进行下面的路由模板设置
![](https://img2018.cnblogs.com/blog/710776/201901/710776-20190123141328493-557083343.png)

2)路由模板设置

跟httpGet请求方式的路由模板设置一样,同样有template,Name,Order三个参数可设置,后面两个可选。

请求路径:/api/values/PostMethod

有参请求

1)默认方式

尝试了很多方式,最终发现如下可行,请求路径:/api/[controller]



Ajax和PostMan请求都需要contentType: "application/x-www-form-urlencoded" ,重点是不能使用 [ApiController] 和[FromBody] 进行修饰(暂且不评论,我觉的用Get方式就好了)

Ajax请求代码如下:

  1. $.ajax({
  2. type: "POST",
  3. accepts: "application/x-www-form-urlencoded",
  4. url: "/api/post",
  5. contentType: "application/x-www-form-urlencoded",
  6. data: {
  7. 'value': '张三丰'
  8. },
  9. error: function (jqXHR, textStatus, errorThrown) {
  10. alert("Something went wrong!");
  11. },
  12. success: function (result) {
  13. }
  14. });

2)路由模板设置

跟httpGet请求方式的路由模板设置一样,同样有template,Name,Order三个参数可设置,后面两个可选。

请求路径:/api/[controller]/PostName

3)组合参数请求

如果即有复杂类型参数,又有简单类型参数同时存在,怎么办呢,如下所示:

此时请求控制器是要有显示属性 [ApiController] 即可。请求方式如下:

请求路径:/api/todo?name=xiaoming&id=20

4)动态类型

如下图所示,是支持dynamic的类型参数的,contentType:“application/json”

请求路径:/api/todo

总结

欢迎讨论,欢迎讨论,欢迎指出不正确之处,欢迎一起学习!也鼓励大家认真写博客,巩固自己和他人。

详解ASP.NET Core API 的Get和Post请求使用方式的更多相关文章

  1. 详解Asp.Net Core 2.1+的视图缓存(响应缓存)

    响应缓存Razor 页与 ASP.NET 核心 2.0 中不支持. 此功能将支持ASP.NET 核心 2.1 版本. 在老的版本的MVC里面,有一种可以缓存视图的特性(OutputCache),可以保 ...

  2. 详解ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ...

  3. 详解 ASP.NET Core MVC 的设计模式

    MVC 是什么?它是如何工作的?我们来解剖它 在本节课中我们要讨论的内容: 什么是 MVC? 它是如何工作的? 什么是 MVC MVC 由三个基本部分组成 - 模型(Model),视图(View)和控 ...

  4. 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”

    来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...

  5. 三张图片详解Asp.Net 全生命周期

    用三张图片详解Asp.Net 全生命周期 下面我们使用三张图片解析ASP.net的整个生命周期,我总感觉使用图片更加的清楚的说明这种问题,所以使用的这样方式 说明: 1  第一张图片从全局说明从客户端 ...

  6. 详解ASP.NET MVC 控制器

    1   概述 在阅读本篇博文时,建议结合上篇博文:详解ASP.NET MVC 路由  一起阅读,效果可能会更好些. Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务端的 ...

  7. ASP.NET Core API 接收参数去掉烦人的 [FromBody]

    在测试ASP.NET Core API 项目的时候,发现后台接口参数为类型对象,对于PostMan和Ajax的Post方法传Json数据都获取不到相应的值,后来在类型参数前面加了一个[FromBody ...

  8. ASP.NET CORE API Swagger+IdentityServer4授权验证

    简介 本来不想写这篇博文,但在网上找到的文章博客都没有完整配置信息,所以这里记录下. 不了解IdentityServer4的可以看看我之前写的入门博文 Swagger 官方演示地址 源码地址 配置Id ...

  9. ASP.NET Core API ——Dapper的使用

    ASP.NET Core API ——Dapper的使用 简介:Dapper是一个ORM框架,负责数据库和程序语言之间的映射. 使用步骤: l  创建一个IDBConnection的接口对象 l  编 ...

随机推荐

  1. delphi odbc远程连接sqlserver

    ip设置格式xx.xx.xx.xx,port ip和端口号之间是逗号

  2. Objects First with Java 读书笔记 (1)

    umm...这学期被发了助教Java的任务,为了避免误人子弟从零开始现学.课是英语教学,就不逐字翻译了,方便记. 参考书目:Objects First with Java - A Practical ...

  3. AndroidStudio中如何使用GsonFormat

    转载:https://www.jianshu.com/p/3b82f42e5937 第一步: 找到AndroidStudio中得Prefrences的plugins的Browse repositori ...

  4. NodeMan介绍

    近年来,随着nodejs的突飞猛进,node项目数量增长迅猛,node项目完美的阐释了“开箱即用”的理念.小到创业公司,大到阿里这样的巨头,背后均有node的身影. node项目基于Chrome的V8 ...

  5. HTMLTESTRunner自动化测试报告增加截图功能

    我们都知道HTMLTESTRunner自动化测试报告,是Unittest单元测试框架报告,那么在做ui测试的时候就有点不适用了. 我们需要出错截图功能. 以下是我改的,增加了截图功能,先展示界面,再展 ...

  6. .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?(转)

    .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?  后端开发  作者: Rector  1973 阅读  0 评论  0 收藏  收藏本文 ...

  7. python的库小全

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  8. Java课程02-动手动脑

    1.编写一个方法,生成一千个随机数,纯随机数发生器. package random; public class random { public static void main(String[] ar ...

  9. Centos7 关于防火墙的一些简单配置

    近期安装了linux系统Centos7,接触下来发现了与原来的Centos6.5有一些差别,这里主要记录下来我的一些关于Centos7防火墙的了解. 一.firewall简介 CentOS 7中防火墙 ...

  10. 寻找U2OS中表达的基因及其promoter并用于后续annotation

    方法1.RNA-seq得到不同表达程度基因 方法2. 直接download U2OS_gene.csv https://cancer.sanger.ac.uk/cell_lines/download ...