从绑定的 OData 操作返回实体

问题描述 投票:0回答:1

我正在尝试从绑定的 OData 操作返回实体,但找不到有效的方法。 请求正确路由,但在编写响应时,OData 抱怨:

When writing a JSON response, a user model must be specified and the entity set and entity type must be passed to the ODataMessageWriter.CreateODataResourceWriter method or the ODataResourceSerializationInfo must be set on the ODataResource or ODataResourceSet that is being written.

这就是我的 EdmModel 的样子:

builder.EntitySet<EntityDto>("Entities");

builder
 .EntityType<EntityDto>().Collection
 .Action(nameof(EntitiesController.Work))
 .ReturnsFromEntitySet<EntityDto>("Entities");

这是我的处理者:

[HttpPost("api/Entities/{key:guid}/Work")]
public async Task<IActionResult> Work([FromODataUri] Guid key, [FromBody] WorkOptions options)
{
    if (!ModelState.IsValid)
    {
        throw new BadRequestException();
    }

    var entity = await _service.DoSomething();
    var dto = _mapper.Map<EntityDto>(entity);
    
    return new OkObjectResult(dto);
}

我尝试将 EdmBuilder 中的返回类型更改为像

IActionResult
这样的通用类型,只要我不返回任何内容或不属于 EdmModel 的对象,它就可以工作。

c# asp.net .net asp.net-core odata
1个回答
0
投票

问题是我尝试将操作绑定到集合而不是单个实体,但使用

key
参数调用它。因此,从模型中删除
.Collection
为我解决了这个问题:


    建设者
     .EntityType().集合
     .EntityType()
     .Action(nameof(EntitiesController.Work))
     .ReturnsFromEntitySet("实体");

© www.soinside.com 2019 - 2024. All rights reserved.