如何在OData RESTier上创建自定义函数

时间:2015-07-30 08:46:28

标签: asp.net-mvc odata restier

我指的是http://odata.github.io/RESTier/#03-01-Operations如何创建一个接受输入并返回对象列表的自定义方法。

这是我的自定义方法

[HttpGet]
[ODataRoute("Locations/PointLoc.Data.GetLocationsByMarketId()")]
public IHttpActionResult GetLocationsByMarketId()
{
    var database = new Database();
    var locations = database.Locations.GetAllLocationsByMarket(1);
    return Ok(locations);
}

以下是我在DbDomain中设置的方法

protected EdmModel OnModelExtending(EdmModel model)
{
    var ns = model.DeclaredNamespaces.First();

    var location = model.FindDeclaredType(ns + "." + "Location");
    var locations = EdmCoreModel.GetCollection(location.GetEdmTypeReference(isNullable: false));

    var getLocationsWithMarketId = new EdmFunction(ns, "GetLocationsWithMarketId", locations, true, null, false);
    getLocationsWithMarketId.AddParameter("bindingParameter", locations);
    model.AddElement(getLocationsWithMarketId);

    return model;
}

无法让它发挥作用。继续得到OData Uri错误

'位置/ PointLoc.Data.GetLocationsByMarketId()'关于行动' GetLocationsByMarketId'在控制器' PointLoc'不是有效的OData路径模板。请求URI无效。由于细分'地点'指的是一个集合,它必须是请求URI中的最后一个段,或者必须后跟一个可以绑定到它的函数或动作,否则所有中间段都必须引用单个资源。

想通过" / Locations / GetLocationsByMarketId"访问Odata。怎么做?

0 个答案:

没有答案