我是构建 ASP.NET Web API 的新手(因此,如果这个问题看起来很愚蠢,我提前表示歉意),现在是我采用 OData 来进行更复杂查询的时候了。 我遵循了基本指南并在我的 Program.cs 中配置了这样的 OData:
builder.Services.AddControllers()
.AddOData(options =>
options.EnableQueryFeatures(null))
然后,我简单地用
[EnableQuery]
属性修饰需要 OData 查询的方法,一切似乎都运行得相当不错。我已经能够订购、跳过和拿走我想要的任何东西,直到我介绍了这种新方法:
[HttpGet("AllFiltered")]
[EnableQuery]
public async Task<IActionResult> GetAllFilteredAsync([FromQuery] Enums.MyEnum[]? filters, [FromQuery] string? userId = null)
{
return Ok(await _myCustomManager.GetAllFilteredAsync(filters, userId));
}
已经有自己的过滤器了。然后我尝试添加 OData 过滤器,如下所示:
但不幸的是我收到了这个错误:
{"errors":{"filters":["值'0?$orderby=Date desc'无效。"]},"type":"https://tools.ietf.org/html/rfc7231 #section-6.5.1","title":"发生一个或多个验证错误。","status":400,"traceId":"00-22acad363a347b307ff4cb3d7f88b7d4-cab5bb7b8e1c9e9c-00"}
因此表明不能使用此语法。有没有一种方法可以在不使用 OData 的
$filter
功能的情况下实现我想要的目标?
如果我使用的这种方法不是管理问题的最佳实践,您能建议一种更好的方法吗?
预先感谢!
?
中的filters=0?$orderby=Date%20desc
必须是&
,因此引入OData参数作为附加参数。如果没有这个,直到 skip
的整个值将被视为单个值,并且您会收到验证错误。