OData API 复合键和 Swagger 设置

OData API Composite key and Swagger Settings

我遇到 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)

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

Microsoft.OData.ODataException: The number of keys specified in the URI does not match number of key properties for the resource.

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

谢谢

好的,我终于找到了解决办法。

我已将我的参数更改为我的控制器并删除了我参数上的 'key' 前缀。

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

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

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

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

谢谢