EntitySet Controller中的其他Get XYZ方法

时间:2013-06-23 13:59:15

标签: asp.net-web-api odata

我希望能够在我的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;            
            }

1 个答案:

答案 0 :(得分:2)

您正在寻找尚未开箱即用的OData功能。我们这边有一个问题。你可以对它进行投票。

http://aspnetwebstack.codeplex.com/workitem/881