我使用的是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

如您所见,筛选器类型在方括号中指定.这是应该使用的filter standard defined in 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();
}

推荐答案

您可以使用DICTIONAL-[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();
}

Csharp相关问答推荐

获取Windows和Linux上的下载文件夹

在包含空项的列表上使用具有断言T的摘要表

需要更改哪些内容才能修复被覆盖的财产中的无效警告CS 8765?

子组件:如何根据另一个组件的状态启用输入

WPF Windows初始化正在锁定. Net 8中分离的线程

在多对多关系上不删除实体

如何注册实现同一接口的多个服务并注入到控制器构造函数中

.NET HttpClient、JsonSerializer或误用的Stream中的内存泄漏?

如何在Parall.ForEachAsync中使用CancerationTokenSource

HttpConext.Request.Path和HttpConext.GetEndpoint()之间的差异

内部接口和类的DI解析

在实体框架中处理通用实体&S变更跟踪器

如何将MemberInitExpression添加到绑定中其他Lambda MemberInitExpression

.NET:从XPath定位原始XML文档中的 node

如何在发布NuGet包之前设置命名空间?

.NET EF Core Automapper项目到筛选不起作用

SqlException:无法打开数据库.升级到Dotnet 8后-数据库兼容性版本-非EFCore兼容性级别

HttpClient,上传文件时实现进度

如何对正方形格线进行对角分组

我应该使用IMhemyCache来存储承载令牌,还是应该为Azure函数中的401个错误实施Polly重试策略?