1

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

1 回答 1

2

您正在寻找 OData 函数,它尚不支持开箱即用。我们这边有问题。您可以对其进行投票。

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

于 2013-06-23T16:10:25.883 回答