OData + Swagger。网址生成

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

在我的 Net 6 Web-API 项目中,我使用 OData 和 Swagger(它是在创建项目时自动添加的)。

它可以开箱即用,但 Swagger 生成的某些 URL 存在问题。

这是我的 OData 控制器:

public class UsersController : ODataController
{
    // skipped for brevity

    [EnableQuery]
    public IActionResult Get()
    {
        return Ok(_dbContextRepo.Select<DbModel.User>());
    }

    [EnableQuery]
    public SingleResult<User> Get([FromODataUri] int key)
    {
        return SingleResult.Create(_dbContextRepo.Select<User>().Where(u => u.Id == key));
    }
}

SwaggerUI 输出:

SwaggerUI output

当我尝试运行通过 Id 从 Swagger 获取实体的查询时,由于 url 错误而失败。

enter image description here

由于某种原因,Swagger 会生成查询参数和 URL,如上图所示。对于 OData URL 必须是这样的(路径参数,https://swagger.io/docs/specification/describing-parameters/):

https://localhost:7250/api/Users/1

在 swagger.json 参数中描述为

enter image description here

花了一整天的时间试图解决这个问题。将不胜感激任何帮助。

.net-core swagger odata
1个回答
1
投票

我自己找到了解决方案。我正在使用 OData 8,似乎不需要将方法参数标记为 [FromODataUri]

[EnableQuery]
public SingleResult<User> Get(int key)
{
    //...
}

没有它,Swagger 会生成正确的链接。

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