web api通过post请求做查询,隐藏传递的参数
我们正常写web api 的时候,查询一般用的都是get请求,但是问题就是get请求会把你传递的参数会直接暴露在url中,如果你的参数有重要的信息,这个时候get请求就不安全了,那我们只能用post请求了。
我们正常写的web api就是修改方法上边的契约表示
[HttpGet]
public void getTest(string a)
[HttpPost]
public void postTest(string b)
但是在测试的时候,你会发现既是你写的是post请求,但是你的参数还是会暴露在url中,是因为你传的参数的形式不对。
我们都知道post请求的基础类型的参数和get请求不一样,get是通过url获取参数,而post则是通过http请求体中传过来的,所以web api的post会去http请求体中取参数。
这是get请求的swagger的参数输入方式(直接输入你测试参数就好,系统给你自动生成键值对):
post请求(输入的数据是键值对形式):
既然系统不会给你形成键值对形式的参数形式,那我们自己来。
这里加了FromBody之后,就不会post就不会以键值对(key:value)的形式去取值了,就是直接去取值了(又key了,直接找value就好了)。
//一个参数的时候
[HttpPost]
public void postTest([FromBody]string name)
//参数格式
{
"Eric"
//或
"":"Eric"
}
上边那个比较适合参数比较少的时候,但是如果参数比较多的时候,我们就不能用好多个参数来输入了,只能靠一个类来接收了,但是如果这样的请求很多的时候,我们系统会产生多个参数类呢?这个时候我们可以选择dynamic,这就灵活起来了。
//多个参数的时候
//推荐:
[HttpPost]
public void postTest2(dyanmic params)
{
string p1 = Convert.Tostring(params.name);
string p2 = Convert.Tostring(params.age);
}
//参数格式
{
name:"Eric",
age:"18"
}
总结的时候,总感觉有很多话和分享,但是写的时候发现也就这些吧!
希望能给大家带来帮助!