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的参数输入方式(直接输入你测试参数就好,系统给你自动生成键值对):

web api通过post请求做查询,隐藏传递的参数

post请求(输入的数据是键值对形式):

web api通过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"
}

 

总结的时候,总感觉有很多话和分享,但是写的时候发现也就这些吧!

希望能给大家带来帮助!