我希望能够在我的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 params进一步过滤。
我读到的所有内容都说这将是一个odata动作,因此必须是一个POST,但Get也是一个动作,这是一个GET,那么为什么不允许带有附加参数的扩展getter呢?我错过了什么吗?我如何完成我想要完成的任务?
我会从ajax客户端这样称呼它: GET / odata / Airports?$ inlinecount = allpages&amp; $ top = 25&amp; airportId = 2112&amp; radius = 50
与常规的odata GET相反: GET / odata / Airports?$ inlinecount = allpages&amp; $ 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;
}
答案 0 :(得分:2)
您正在寻找尚未开箱即用的OData功能。我们这边有一个问题。你可以对它进行投票。