详解ASP.NET Core API 的Get和Post请求使用方式

原文:详解ASP.NET Core API 的Get和Post请求使用方式

上一篇文章帮助大家解决问题不彻底导致博友使用的时候还是遇到一些问题,欢迎一起讨论。
所以下面重点详细讲解我们常用的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]

但是如果此时有另外一个Post方法,又没有重命名新的模板,无论是有没有参数,都会报错的。因为api/values请求路径只会去找POST请求方式。所以要进行下面的路由模板设置

2)路由模板设置

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

请求路径:/api/values/PostMethod

有参请求

1)默认方式

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

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

Ajax请求代码如下:

  $.ajax({
                type: "POST",
                accepts: "application/x-www-form-urlencoded",
                url: "/api/post",
                contentType: "application/x-www-form-urlencoded",
                data: {
                    'value': '张三丰'
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert("Something went wrong!");
                },
                success: function (result) {
                }
            });

2)路由模板设置

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

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

3)组合参数请求

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

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

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

4)动态类型

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

请求路径:/api/todo

总结

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

原文地址:https://www.cnblogs.com/lonelyxmas/p/10317848.html

时间: 2024-10-02 09:10:18

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

详解Asp.Net Core中的Cookies

目录 详解Asp.Net Core中的cookies 搞懂cookies Asp.Net中cookies的实现 从http中获取cookies 将cookies写入http中 总结及感想 详解Asp.Net Core中的cookies 搞懂cookies 我之前写过一篇文章来介绍cookies,如果你对cookies不是很了解请移步理解cookies这篇文章,这对于我们研究asp.net core中的cookies可以起到很大的帮助. Asp.Net中cookies的实现 cookies是htt

详解ASP.NET Core Docker部署

前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ASP.NET Nginx 发布和部署 :http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html. Asp.Net Jexus 发布和部署:http://www.cnblogs.com/savorboard/p/dot-n

详解ASP.NET MVC 控制器

1   概述 在阅读本篇博文时,建议结合上篇博文:详解ASP.NET MVC 路由  一起阅读,效果可能会更好些. Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务端的交互,并且负责协调Model与View之间数据传递,是ASP.NET MVC框架核心.Controller为ASP.NET MVC框架的核心组成部分,其主要负责处理浏览器请求,并决定响应什么内容给浏览器,但并不负责决定内容应如何显示(View的职责). 文章内容包括:Controller概述.Con

详解ASP.NET4 GridView的四种排序样式

与ASP.NET 的其他Web控件一能够,Gridview控件拥有很多不同的CSS样式属性设置,包括象CssClass,Font字体,ForeColor,BackColor,BackColor, Width, Height等等.Gridview还包括了一些应用在表格的行上的样式属性,比如RowStyle, AlternatingRowStyle, HeaderStyle,和PagerStyle,它们都提供了象CssClass和Font这些基本的属性设置. 在ASP.NET 4.0中的Gridvi

asp.net core api网关 实时性能监控

asp.net core api网关 实时性能监控 使用InfluxDB.Grafana Dockerfile 运行 InfluxDB.Grafana influxdb: image: influxdb ports: - "8086:8086" - "8083:8083" environment: - INFLUXDB_DB=TogetherAppMetricsDB - INFLUXDB_ADMIN_ENABLED=true - INFLUXDB_ADMIN_USE

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

简介 本来不想写这篇博文,但在网上找到的文章博客都没有完整配置信息,所以这里记录下. 不了解IdentityServer4的可以看看我之前写的入门博文 Swagger 官方演示地址 源码地址 配置IdentityServer4服务端 首先创建一个新的ASP.NET Core项目. 这里选择空白项,新建空白项目 等待创建完成后,右键单击项目中的依赖项选择管理NuGet程序包,搜索IdentityServer4并安装: 等待安装完成后,下载官方提供的UI文件,并拖放到项目中.下载地址:https:/

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

在测试ASP.NET Core API 项目的时候,发现后台接口参数为类型对象,对于PostMan和Ajax的Post方法传Json数据都获取不到相应的值,后来在类型参数前面加了一个[FromBody]属性才获取到.但是我看微软官方文档演示代码中并没有添加[FromBody],难道是微软官方文档写错了,按道理应该不会.Google里看到一片篇文章里的一个细节,又追回微软官方文档发现可行,于是记下去掉这个烦人的[FromBody]过程 修改之前测试 后台通过Visual Studio生成ASP.N

ASP.NET Core API总结(一)

ASP.NET Core API 问题:当应用收到一个http请求之后,API应用程序是怎么一步步执行的. 注册服务——构造容器——使用服务——创建对象 1.         创建一个新的API之后,properties下面会自动生成这个json文件. 2.         第一步:应用启动的时候,在program.cs文件中执行main函数,进行创建主机.(加载配置文件)——指定Startup类(1.配置应用服务.2.创建请求处理管道) 3.         第二步:执行到Startup类的时

ASP.NET Core API ——Dapper的使用

ASP.NET Core API ——Dapper的使用 简介:Dapper是一个ORM框架,负责数据库和程序语言之间的映射. 使用步骤: l  创建一个IDBConnection的接口对象 l  编写Sql语句的增删改查 l  执行Execute方法 1.       提供一个IDBConnection接口对象 2.       在DB仓库中继承抽象类从而获取IDBConnection对象.继承了抽象类,所以抽象类中的属性可以在子类中使用. 3.       编写Sql语句,使用dapper的