Controller和Razor页面可处理来自HTTP请求的数据。例如,route数据可以提供记录键,而过帐表单字段可以提供模型属性的值。编写代码来检索这些值中的每一个并将它们从字符串转换为.NET类型,将是乏味且容易出错的。模型绑定使该过程自动化。使用接收GET和POST请求参数变得很简单。

1、使用route和QueryString接收GET请求参数

GET请求的URL

http://contoso.com/api/pets/2?DogsOnly=true

接收参数的Action方法

[HttpGet("{id}")]
public ActionResult<Pet> GetById(int id, bool dogsOnly)

模型绑定将经历以下步骤

1) 查找的第一个参数GetByID,即名为的整数id。
2) 浏览HTTP请求中的可用源,并id在路由数据中找到="2"。
3) 将字符串"2"转换为整数2。
4) 查找的下一个参数GetByID,即名为的布尔值dogsOnly。
5) 浏览源并在查询字符串中找到“DogsOnly = true”。名称匹配不区分大小写。
6) 将字符串"true"转换为boolean类型的true。

模型绑定目标是简单类型的方法参数。目标也可以是复杂类型的属性。成功绑定每个属性后,将对该属性进行模型验证。将哪些数据绑定到模型以及任何绑定,或验证错误的记录存储在ControllerBase.ModelStatePageModel.ModelState中。要确定此过程是否成功,应用程序将检查ModelState.IsValid标志。

2、对于不同的ContentType接收POST请求的参数

1) 对于请求ContentType为'application/x-www-form-urlencoded; charset=utf-8'接收的方法

POST /api/Person/UnProtected HTTP/1.1
Host: localhost:5000
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

FirstName=Andrew&LastName=Lock&Age=31

接收参数的Action方法:

public class PersonController : Controller
{
    [HttpPost]
    public IActionResult Index([FromForm]Person person)//[FromForm]可省略
    {
        return Json(person);   
    } 
}

2) 对于请求ContentType为'application/json; charset=utf-8'接收的方法

POST /api/Person/UnProtected HTTP/1.1
Host: localhost:5000
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json; charset=UTF-8

{"FirstName":"Andrew","LastName":"Lock","Age":"31"}

接收参数的Action方法:

public class PersonController : Controller
{
[HttpPost]
public IActionResult Index([FromBody] Person person)
{
return Json(person);
}
}

标签说明:

[FromQuery]: 从查询字符串中获取值。

[FromRoute] : 从路线数据获取值。

[FromForm] : 从发布的表单字段中获取值。

[FromBody] : 从请求主体获取值。

[FromHeader] : 从HTTP标头获取值。

相关文档ASP.NET Core Action接收VUE中Axios提交Form表单参数方法及示例代码

推荐文档