gpt4 book ai didi

c# - Web API OData : How do you $expand on a single entity?

转载 作者:太空狗 更新时间:2023-10-29 23:15:29 25 4
gpt4 key购买 nike

我都读过 these articles多次尝试找出一种在单个实体上使用 $expand 查询选项的方法,但在我尝试过的每一种方法中,我似乎都无法做到这行得通。所有其他查询选项均有效,$expand 目前也适用于集合结果。

模型:玩家实体有一个名为 Stats 的导航属性,其中每个对象都包含给定年份该玩家的统计数据。

我以这种方式设置了 OData:

config.EnableQuerySupport();

ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Player>("OPlayer");
modelBuilder.EntitySet<PlayerStatistics>("OPlayerStats");

Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);

最初,我是这样设置我的 Controller 的:

public class OPlayerController : EntitySetController<Player, int>
{
private readonly DatabaseContext _db = new DatabaseContext();

protected override Player GetEntityByKey(int key)
{
return _db.Players.FirstOrDefault(p => p.PlayerId == key);
}

public override IQueryable<Player> Get()
{
return _db.Players.AsQueryable();
}

protected override void Dispose(bool disposing)
{
_db.Dispose();
base.Dispose(disposing);
}
}

使用此配置,我可以进行以下查询:

  • /odata/OPlayer(600)
  • /odata/OPlayer
  • /odata/OPlayer?$expand=Stats

但显然不是(结果没有展开):

  • /odata/OPlayer(600)?$expand=Stats

两篇文章都提到,为了支持它,您必须向您的 Controller 添加一个方法(操作?),如下所示:

[Queryable]
public SingleResult<Player> GetPlayer(int id)
{
return SingleResult.Create(_dbContext.Players.Where(c => c.ID == id);
}

当我将它添加到我的 Controller 时,/odata/OPlayer(600)/odata/OPlayer(600)?$expand=Stats 都返回 在 Controller “OPlayer”上找不到与请求匹配的操作。

任何人都可以提供说明或提供指示以支持单个实体上的 $expand 吗?

最佳答案

您的操作 GetPlayer 得到的参数名称不正确。参数名称应为“key”而不是 id。试试这个作为你的行动,

[Queryable]
public SingleResult<Player> GetPlayer([FromODataUri]int key)
{
return SingleResult.Create(_db.Players.Where(c => c.PlayerId == key));
}

关于c# - Web API OData : How do you $expand on a single entity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19128009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com