【问题标题】:OData API Composite key and Swagger SettingsOData API 组合键和 Swagger 设置
【发布时间】:2021-03-20 00:20:01
【问题描述】:

我在使用 Swagger 时遇到问题。

我有一个 .Net Core Wep API,其中一个实体使用复合键。

使用以下语法声明键:


public class EntityConfig : IModelConfiguration
    {
        public void Apply(ODataModelBuilder builder, ApiVersion apiVersion)
        {
            EntityTypeConfiguration<Entity> entity = builder.EntitySet<Entity>("Entity").EntityType;
            entity.HasKey(x => new { x.FirstId, x.SecondId});
        }
    }

我的控制器像这样声明我的删除 API 点:

[ODataRoutePrefix("Entity")]
public class EntityController : ODataController
{
///ctor with context injection

    [HttpDelete]
    public async Task<IActionResult> Delete([FromODataUri] int keyFirstId, [FromODataUri] int keySecondId)
    {
    ///Delete Behavior
    }

}

我可以使用 Postman 使用以下请求调用我的 Delete 方法: http://localhost:8090/api/Entity(FirstId=1,SecondId=1)

Eveything 适用于 Postman 和我的网站,但是当我尝试启动 Swagger 时出现此错误:

Microsoft.OData.ODataException:URI 中指定的键数与资源的键属性数不匹配。

如何设置 Swagger 在继续使用 OData 的同时接受我的参数作为复合键?

谢谢

【问题讨论】:

  • 你有没有试过在Delete方法的头部添加HttpDelete属性?尝试使用该属性添加多个参数,代码如下:[HttpDelete("odata/Entity(FirstId=1,SecondId=1)")].
  • 我使用 [HttpDelete],我会将它添加到我的问题中。我也会试试你的解决方案,谢谢你的评论。

标签: asp.net-core-mvc swagger asp.net-core-webapi asp.net-core-3.1 odata-v4


【解决方案1】:

好的,我终于找到了解决方案。

我已将参数更改为控制器并删除参数上的“键”前缀。

然后我通过这个版本更改了我的请求:

http://localhost:8090/api/Entity(FirstId=0,SecondId=0)?FirstId=1&SecondId=1

如果没有第一个参数声明 (FirstId=0,SecondId=0),请求将无法工作,我认为语法会强制参数被我的控制器视为有效。

无论如何,一切正常,招摇不再抱怨,所以我想这是一个好的开始。

谢谢

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 2019-12-05
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2016-08-03
    • 2015-08-24
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多