我希望能够在我的 EntitySetController 派生控制器类中拥有额外的 GetXYZ 方法。例如:
[HttpGet]
[Queryable]
public string GetAirportsWithinRadius(int airportId, int radius)
{
var resultAirports = GetAirportsWithinRadius2(airportId, radius);
return resultAirports;
}
这就是我的配置:
ActionConfiguration getAirportsWithinRadius = modelBuilder.Entity<Airport>().Collection.Action("GetAirportsWithinRadius");
getAirportsWithinRadius.Parameter<int>("airportId");
getAirportsWithinRadius.Parameter<int>("radius");
getAirportsWithinRadius.ReturnsCollectionFromEntitySet<Airport>("Airports");
我希望此操作像默认的 Get Queryable 操作一样可组合,但这将是支持所有 odata 参数但另外还支持 airportId 和 radius 的替代方法。这将首先通过半径搜索过滤机场(我知道该怎么做 - 这与问题无关),然后返回 Queryable 以便它可以通过 odata 参数进一步过滤。
我读到的所有内容都说这将是一个 odata 操作,因此必须是一个 POST,但 Get 也是一个操作,它是一个 GET,那么为什么不允许使用附加参数的扩展 getter 呢?我错过了什么吗?我如何完成我想要完成的事情?
我会这样从 ajax 客户端调用它: GET /odata/Airports?$inlinecount=allpages&$top=25&airportId=2112&radius=50
与常规的 odata GET 不同:GET /odata/Airports?$inlinecount=allpages&$top=25
谢谢
编辑:我现在明白这是一个 odata “功能”,它正在考虑作为未来的功能。让我们暂时忘记这个 odata 的含义。它本质上是一个返回 Queryable 的 WebApi HttpGet,对吧?所以,只要我不关心这个“函数”的元数据广告,我怎么能确保它是一个可访问的 HttpGet,形成一个 ODataController 内部的路由透视图?ODataController 需要 MapODataRoute,我可以使用额外的 MapHttpRoutes 额外添加非 odata 路由吗?我问这个是因为在我看来我应该能够,但我所有的尝试都失败了(试图通过提琴手点击 HttpGet)。我找不到使用其他非 OData GET 扩展 ODataController 的示例。
[Queryable]
public IQueryable<Airport> Get()
{
return db.Airports;
}
[HttpGet]
[Queryable]
public string GetAirportsWithinRadius(int airportId, int radius)
{
var resultAirports = GetAirportsWithinRadius2(airportId, radius);
return resultAirports;
}