问题描述
当我们在使用ASP.NET Core创建Web应用程序或者RESTful API接口应用程序的时候,接收客户端的参数是经常需要处理的问题,ASP.NET Core接口控制器根据接收到的请求参数作对应的处理,然后返回客户端需要的数据。
那么,在ASP.NET Core Web应用程序或者ASP.NET Core Web API应用程序开发时,如何从querystring中获取参数和对应的参数值呢?
方案一
ASP.NET Core可以根据匹配的路由自动绑定表单值、路由值和查询字符串,所以,在ASP.NET Core中最简单的获取参数的方式为:
[Route("api/[controller]/[action]")]
[ApiController]
public class OrderController : ControllerBase
{
[HttpGet("{id:int?}")]
public IActionResult Find(int id)
{
return Ok(new { data = id });
}
}
对应的请求路径为:
http://localhost:58112/api/order/find/1
输出结果为:
{"data":1}
如果有两个参数,则在对应的Action方法中添加参数名即可,如:
[Route("api/[controller]/[action]")]
[ApiController]
public class OrderController : ControllerBase
{
[HttpGet("{id:int?}/{uid:int?}")]
public IActionResult Find(int id,int? uid)
{
return Ok(new { data = id ,uid});
}
}
对应的请求路径为:
http://localhost:58112/api/order/find/1/2
输出结果为:
{"data":1,"uid":2}
方案二
使用Request.Query['参数名']
方式从请求地址中获取,如下:
[Route("api/[controller]/[action]")]
[ApiController]
public class OrderController : ControllerBase
{
[HttpGet]
public IActionResult Find()
{
var id = Request.Query["id"];
return Ok(new { data = id });
}
}
对应的请求路径为:
http://localhost:58112/api/order/find/?id=1
输出结果为:
{"data":["1"]}
方案三
使用[FromQuery]
将指定的参数名和querystring进行绑定,如下:
[Route("api/[controller]/[action]")]
[ApiController]
public class OrderController : ControllerBase
{
[HttpGet]
public IActionResult Find([FromQuery(Name ="id")] int id)
{
return Ok(new { data = id });
}
}
对应的请求路径为:
http://localhost:58112/api/order/find/?id=1
输出结果为:
{"data":1}
如果要绑定多个参数,则如下:
[Route("api/[controller]/[action]")]
[ApiController]
public class OrderController : ControllerBase
{
[HttpGet]
public IActionResult Find([FromQuery(Name ="id")] int id, [FromQuery(Name = "page")] int page)
{
return Ok(new { data = id,page });
}
}
对应的请求路径为:
http://localhost:58112/api/order/find/?id=1&page=2
输出结果为:
{"data":1,"page":2}
方案四
如果你的请求参数比较多,为了方便管理和使用,建议创建一个查询参数的实体类,如:
[Route("api/[controller]/[action]")]
[ApiController]
public class OrderController : ControllerBase
{
[HttpGet]
public IActionResult Find([FromQuery] QueryModel query)
{
return Ok(new { query });
}
}
public class QueryModel
{
public int Id { get; set; }
public int Page { get; set; }
}
对应的请求路径为:
http://localhost:58112/api/order/find/?id=1&page=2
输出结果为:
{"data":1,"page":2}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册