ApiController特性
FromBody属性批注
ApiController特性中的FromBody属性批注,使用该属性批注的接口只能通过application/json方式调用。使用其他方式则会响应415
通过application/x-www-form-urlencoded 方式调用
通过application/json 方式调用
FromForm属性批注
ApiController特性中的FromForm属性批注,使用该属性批注的接口无法接收到通过application/json 方式的参数、即相当于只能通过application/x-www-form-urlencoded 方式调用。
通过application/json 方式调用传参
通过application/x-www-form-urlencoded 方式调用
使用ApiController特性代码示例
[ApiController]
[Route("api/[Controller]/[Action]")]
public class TestController :ControllerBase
{
[HttpPost("/test")]
public string Test(string msg)
{
JObject jo = JObject.Parse(msg);
string name = Convert.ToString(jo["Name"]);
return name;
}
[HttpPost("/test1")]
public string Test1([FromBody]string msg)
{
JObject jo = JObject.Parse(msg);
string name = Convert.ToString(jo["Name"]);
return name;
}
[HttpPost("/test2")]
public string Test2([FromForm]string msg)
{
JObject jo = JObject.Parse(msg);
string name = Convert.ToString(jo["Name"]);
return name;
}
}
以上代码中有三个Api接口,它们的区别为test接口未使用任何属性批注,test1接口使用了[FromBody]属性批注,test2接口使用了[FromForm]属性批注。
未使用属性批注的接口参数是在URL中传递的,即访问地址为:http//ip:port/test?msg=“{“Name”:“Xiaoming”}”
使用属性批注参数是在Body中,但类型不一致
注
使用Visual Studio编写项目本地调试时,Swagger接口文档页面调用接口不论使用哪种批注均可调用成功。因为Swagger会自动选择访问类型。
同一个接口多个参数不可同时使用FromBody与FromForm。如果有多个参数建议封装为一个实体类,对实体类参数进行属性批注。