在做后台api接口时,常常涉及到Http方法访问问题,其中最基础也是最核心的就是传参问题。在基于C#的webapi项目中,其传参有两种实现方式,一种是使用[FromBody]和[FromUri]作为Http接口函数形参前缀传参,另一种是将函数的形参设置为空,使用System.Web.Http命名空间下的【HttpContext.Current.Request】获取。
第一种,使用[FromBody]和[FromUri]作为Http接口函数形参前缀传参
eg1:在url中传参访问,即后端使用[FromUri]
[Route("ParamsGetTest"), HttpGet]
public string ParamsGetTest([FromUri]string param1,[FromUri]string param2)
{
string result = "none";
return result;
}
[Route("ParamsPostTest"), HttpPost]
public string ParamsPostTest([FromUri]string param1, [FromUri]string param2)
{
string result = "none";
return result;
}
[Route("ParamsPostTest"), HttpPost]
public string ParamsPostTest()
{
string param1= HttpContext.Current.Request.Params["param1"].Trim();
string param2= HttpContext.Current.Request.Params["param2"].Trim();
return "ok";
}
此种接口允许url传参,其中,参数名【param1】和【param2】要与接口一致。访问形式如:https://localhost:44358/Test/ParamsPostTest?param1=admin¶m2=admin
在postman测试时,直接在【Params】标签页传参即可。
eg2:在Body中传参访问,即后端使用[FromBody]
//JObject 传值(推荐使用,可以转化为任意实体对象)
[Route("ParamsPostTest"), HttpPost]
public string ParamsPostTest([FromBody]JObject obj)
{
//obj任意名称
RequestBody result = null;
if (obj != null)
{
result = obj.ToObject<RequestBody>();
}
return JsonConvert.SerializeObject(result);
}
//具体实际对象直接传值 T=RequestBody
[Route("ParamsPostTest"), HttpPost]
public string ParamsPostTest([FromBody]RequestBody obj)
{
//obj任意名称
return JsonConvert.SerializeObject(obj);
}
//字符串传值 可为json串
[Route("ParamsPostTest"), HttpPost]
public string ParamsPostTest([FromBody]string obj)
{
//obj任意名称
return JsonConvert.SerializeObject(obj);
}
get方法使用与Post一致,其中,参数名【obj】任意。
在postman测试时,在【Body】标签页【x-www-form-urlencoded】和【raw】选项内,均可实现访问测试,推荐使用【raw】选项测试。