我正在使用 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();
}
使用字典 -
[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();
}
这是一个最小的工作示例。在 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();
}
我想你现在可以想象你能做的不止这些。