如何在 GET 请求中传递 JSON:API 中定义的“过滤查询参数族”标准的多个相关参数?

问题描述 投票:0回答:2

我正在使用 ASP.NET Core 6.0,我需要创建一个 api 端点,它可以处理必须始终提供的两个修复参数以及可选过滤器参数列表:

https://<host>/api/article/GetArticles?pageId=123&filterId=234&filter[category]=1,2&filter[author]=12&filter[year]=2023

如您所见,过滤器类型在括号中指定。这是应该使用的 JSON:API 中定义的 过滤器标准。但是控制器中的端点需要如何定义来支持它呢?

这当然行不通(

filter
null
):

[HttpGet("GetArticles")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult<IContent>> GetArticles(int pageId, int filterId, string? filter = null)
{
    // TODO ...
    return Ok();
}
c# asp.net-core-mvc asp.net-core-webapi asp.net-core-6.0 json-api
2个回答
0
投票

使用字典 -

[FromQuery]Dictionary<string, string>? filter = null
:

[HttpGet("GetArticles")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> GetArticles(
    int pageId,
    int filterId, 
    [FromQuery] Dictionary<string, string>? filter = null)
{
    // TODO ...
    return Ok();
}

0
投票

这是一个最小的工作示例。在 Postman 中使用此路径进行测试

/GetArticles?pageId=1&filterId=2&filter[category]=3&filter[author]=5

请注意,过滤器是字典,因为我正在发送过滤器属性的键值对

[HttpGet("GetArticles")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult<IContent>> GetArticles(
    int pageId,
    int filterId, 
    [FromQuery] IDictionary<string, int> filter = null)
{
    // TODO ...
    return Ok();
}

我想你现在可以想象你能做的不止这些。

© www.soinside.com 2019 - 2024. All rights reserved.