【发布时间】: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