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 不再抱怨,所以我想这是一个好的开始。
谢谢
我遇到 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 不再抱怨,所以我想这是一个好的开始。
谢谢