c# - ASP.NET Web API : Multiple Custom Objects through Query String

标签 c# asp.net-core asp.net-web-api model-binding attributerouting

我正在开发一个 API,我想尝试通过查询字符串获取排序过滤分页对象JSON 形式。

目前,我正在使用以下方式调用我的 API:

baseUrl/reviews?sort={"direction":"asc","field":"time"}&filters=[{"field":"rating","value":9}]&page={"page":1,"items":10}

我的 Controller 看起来像:

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

我看到了与此类似的其他问题,其中讨论了自定义模型绑定(bind)。我已经尝试过,但无法从查询字符串中获取值以尝试反序列化 JSON 数据。

我看到的另一个解决方法是只传递一个 JSON 对象并在 Controller 中反序列化它。但我仍然无法从查询字符串中获取任何数据。

最佳答案

您尝试对非原始对象执行的操作必须使用 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 ..
    }
}

关于c# - ASP.NET Web API : Multiple Custom Objects through Query String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58455613/

相关文章:

c# - 将 google idToken 交换为本地 openId token c#

c# - 如何使用 powershell 为构建服务器构建、发布 ASP.NET 核心项目?

asp.net-mvc-3 - 在 MVC3 项目中使用 Apicontroller

c# - 以更好的方式在.net core web api中上传图像

c# - InvalidCastException 将 Json 字符串映射到 Guid 属性

c# - 存储库模式中的可重用模型

c# - 我应该将什么参数与 SqlFunctions.DateName 一起使用以获得像 "MM"这样的月份?

c# - 为什么 Visual Studio 能够从 DLL 获取方法名称,但 dumpbin 却不能

c# - 为什么更新字符串 INotifyPropertyChanged 属性而不更新 List<string>?

c# - 将 MiniProfiler 连接到 ASP.NET Core Web API Swagger