asp.net core API 如何接收参数

介绍接收参数的多种方式

    • 1、要解析URL中的查询参数,需要用[FromQuery]注释控制器方法参数
    • 2、参数本身就是路径的一部分,可以称之为路由参数
    • 3、接收来自HTTP表体中数据

1、要解析URL中的查询参数,需要用[FromQuery]注释控制器方法参数

[Route("api/[controller]")]
public class PersonController : Controller
{
    //api/Person/GetById?id=123
    [HttpGet("[action]")]
    public string GetById([FromQuery]int id)
    {

    }
    //api/Person/GetByName?firstName=zhangsan&lastName=wang
    [HttpGet("[action]")]
    public string GetByName([FromQuery]string firstName, [FromQuery]string lastName)
    {

    }
    //api/Person/GetByNameAndAddress?firstName=zhangsan&lastName=wang&address=
    [HttpGet("[action]")]
    public string GetByNameAndAddress([FromQuery]string firstName, [FromQuery]string lastName, [FromQuery]string address)
    {
        
    }
}

2、参数本身就是路径的一部分,可以称之为路由参数

[Route("api/[controller]")]
public class BXLogsController : Controller {
       
        // GET api/values/5  
        [HttpGet("{id}")]  
        publicstring Get(int id)  
        {  
            return"value";  
        }  
}

3、接收来自HTTP表体中数据

上面的两个示例都是将参数记录在 URL中,假如提交的参数数量较多,内容较大,都是不适合记录在URL中,比如下面的两种数据编码形式

  • form encoded data
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
  • json data
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"}

对于包含多个字段参数,可以采用模型绑定机制,让HTTP表体中的参数自动转化为对象,方便处理。

public class PersonController : Controller
{
    // 这个路由为/Person/Index的action可以绑定到 form数据 
    [HttpPost]
    public IActionResult Index(Person person){
        return DoSomething(person);   
    } 

    // 这个路由为/Person/IndexFromBody可以绑定到JSON数据 
    [HttpPost]
    public IActionResult IndexFromBody([FromBody] Person person){
        return DoSomething(person);   
    } 



    //这个不是接口,只是一个私有方法
    private IActionResult DoSomething(Person person){
        // do something with the person here
        // ...

        return Json(person);
    }
}

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

参考:https://andrewlock.net/model-binding-json-posts-in-asp-net-core/

你可能感兴趣的:(dotnet,asp.net,core)