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。如果有多个参数建议封装为一个实体类,对实体类参数进行属性批注。
ASP.NET Core API 接口参数解析详解
本文详细介绍了ASP.NET Core中ApiController特性的FromBody和FromForm属性批注的用法。FromBody属性限定接口仅接受application/json类型的请求,而FromForm属性则限定接口接收application/x-www-form-urlencoded类型的数据。此外,未使用属性批注的接口参数会通过URL传递。在实际应用中,应注意接口参数的类型匹配,并避免在同一接口中混用FromBody和FromForm。Swagger在本地调试时能自动处理不同类型的调用。

被折叠的 条评论
为什么被折叠?



