在 ASP.NET 6 中无法同时使用 [FromQuery] 和 OData

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

我是构建 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 过滤器,如下所示:

https://mybackend.net/api/MyTable/AllFiltered?filters=-1&filters=0?$orderby=Date%20desc&skip=0&top=15

但不幸的是我收到了这个错误:

{"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
功能的情况下实现我想要的目标? 如果我使用的这种方法不是管理问题的最佳实践,您能建议一种更好的方法吗? 预先感谢!

asp.net rest routes odata
1个回答
0
投票

?
中的
filters=0?$orderby=Date%20desc
必须是
&
,因此引入OData参数作为附加参数。如果没有这个,直到
skip
的整个值将被视为单个值,并且您会收到验证错误。

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