ASP.NET Web API: 通过查询字符串的多个自定义对象
ASP.NET Web API: Multiple Custom Objects through Query String
我正在研究 API,我想尝试获得 sort、filter 和 分页 对象通过我的 JSON 形式的查询字符串。
目前,我正在给我的 API 打电话:
baseUrl/reviews?sort={"direction":"asc","field":"time"}&filters=[{"field":"rating","value":9}]&page={"page":1,"items":10}
我的控制器看起来像:
namespace NewApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ApiController : ControllerBase
{
[HttpGet]
public JsonResult Search([FromQuery(Name = "sort")] Sort sort, [FromQuery(Name = "Filters")] List<Filter> filters, [FromQuery(Name = "Page")] Page page)
{
... getting data from db be here ..
}
}
}
有了这个,我所有的参数都是null
。
我看到其他类似的问题都谈到了自定义模型绑定。我试过了,但我无法从查询字符串中获取值以尝试反序列化 JSON 数据。
我看到的另一个解决方法是只传递一个 JSON 对象并在控制器中反序列化它。但是我仍然无法从查询字符串中获取任何数据。
您尝试对非原始对象执行的操作必须使用 http 请求的主体来完成。如果您想在查询字符串中执行此操作,请坚持原语。
baseUrl/reviews?sortDirection=asc&sortField=time&filterField=rating&filterValue=9&page=1&items=10
[Route("api/[controller]")]
[ApiController]
public class ApiController : ControllerBase
{
[HttpGet]
public JsonResult Search(string sortDirection, string sortField, string filterField, string filterValue, int page, int items)
// I would also recommend returning IHttpActionResult, much more robust
{
... getting data from db be here ..
}
}
我正在研究 API,我想尝试获得 sort、filter 和 分页 对象通过我的 JSON 形式的查询字符串。
目前,我正在给我的 API 打电话:
baseUrl/reviews?sort={"direction":"asc","field":"time"}&filters=[{"field":"rating","value":9}]&page={"page":1,"items":10}
我的控制器看起来像:
namespace NewApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ApiController : ControllerBase
{
[HttpGet]
public JsonResult Search([FromQuery(Name = "sort")] Sort sort, [FromQuery(Name = "Filters")] List<Filter> filters, [FromQuery(Name = "Page")] Page page)
{
... getting data from db be here ..
}
}
}
有了这个,我所有的参数都是null
。
我看到其他类似的问题都谈到了自定义模型绑定。我试过了,但我无法从查询字符串中获取值以尝试反序列化 JSON 数据。
我看到的另一个解决方法是只传递一个 JSON 对象并在控制器中反序列化它。但是我仍然无法从查询字符串中获取任何数据。
您尝试对非原始对象执行的操作必须使用 http 请求的主体来完成。如果您想在查询字符串中执行此操作,请坚持原语。
baseUrl/reviews?sortDirection=asc&sortField=time&filterField=rating&filterValue=9&page=1&items=10
[Route("api/[controller]")]
[ApiController]
public class ApiController : ControllerBase
{
[HttpGet]
public JsonResult Search(string sortDirection, string sortField, string filterField, string filterValue, int page, int items)
// I would also recommend returning IHttpActionResult, much more robust
{
... getting data from db be here ..
}
}