欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net core MVC接受来自自前端的GET和POST请求方法的区别

程序员文章站 2022-07-06 11:46:24
小伙伴们都知道,常用的http请求有两种方式,即GET方法和POST方法,很多刚入门的童鞋难免都会有一个误区,是不是GET是从服务器上获取数据,POST是向服务器传送数据? 我的理解是:不论是GET还是POST,都是向服务器提交数据,并且请求之后都会从服务器获取数据,两者的区别仅是传送方式不同而已, ......

小伙伴们都知道,常用的http请求有两种方式,即get方法和post方法,很多刚入门的童鞋难免都会有一个误区,是不是get是从服务器上获取数据,post是向服务器传送数据?

我的理解是:不论是get还是post,都是向服务器提交数据,并且请求之后都会从服务器获取数据,两者的区别仅是传送方式不同而已,get通过地址栏传输,post通过报文传输。对资源的增删改查操作其实都可以通过get/post方法来实现,下面就详细介绍一下这两种方法:

一、请求原理以及方式:

1、get 请求

get请求不存在请求实体部分,键值对参数放置在 url 尾部,浏览器把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串追加到url后面,用?分割,加载这个新的url。因此请求头不需要设置 content-type字段。

非 ascii 码会自动进行编码转换,例如发送请求:哈哈    。

值得一提的是,get 参数的编码方式是无法人为干涉的,这导致了不同浏览器有不同的编码方式,因此最稳妥的方案是人工预编码,人工解码,从而禁止浏览器编码的干涉。

2、post 请求

post把提交的数据则放置在是http包的包体中。http header里的content-type一般有好几种方式,但是我自己接触到的是以下两种方式:

a)   application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。会将表单内的数据转换拼接成 key-value 对(非 ascii 码进行编码)

b)   application/json:由于json 格式支持比键值对复杂得多的结构化数据,这一点现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 json 字符串。本文就是重点介绍这种方式。

二、后端获取参数的方式

对于后台接受来自前台的请求时,且content-type为application/json时,可以传递参数也可以不传递参数,但是多数情况下是需要有参数传来的,所以,下面就只介绍有参数传过来的情形:

1、获取get参数 get:([fromquery] user user)

[fromquery]是告诉模型绑定在解析的过程中从httpcontext中那一部分获取信息。

.net core MVC接受来自自前端的GET和POST请求方法的区别

2、获取post参数 post:([(frombody)] user user)

[frombody] 是参数绑定的过程中,告诉框架该参数是使用配置过的格式化程序从http body 中解析。和get不同的是,在接受参数的时候必须要先建立一个实体类来接受参数,并且该实体类必须与前端的请求参数一模一样。

.net core MVC接受来自自前端的GET和POST请求方法的区别

.net core MVC接受来自自前端的GET和POST请求方法的区别