在我的 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 输出:
当我尝试运行通过 Id 从 Swagger 获取实体的查询时,由于 url 错误而失败。
由于某种原因,Swagger 会生成查询参数和 URL,如上图所示。对于 OData URL 必须是这样的(路径参数,https://swagger.io/docs/specification/describing-parameters/):
https://localhost:7250/api/Users/1
在 swagger.json 参数中描述为
花了一整天的时间试图解决这个问题。将不胜感激任何帮助。
我自己找到了解决方案。我正在使用 OData 8,似乎不需要将方法参数标记为 [FromODataUri]。
[EnableQuery]
public SingleResult<User> Get(int key)
{
//...
}
没有它,Swagger 会生成正确的链接。