0

我指的是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”中操作“GetLocationsByMarketId”上的“Locations/PointLoc.Data.GetLocationsByMarketId()”不是有效的 OData 路径模板。请求 URI 无效。由于“Locations”段指的是一个集合,所以它必须是请求 URI 中的最后一个段,或者它后面必须跟一个可以绑定到它的函数或操作,否则所有中间段必须引用单个资源。

想要通过“/Locations/GetLocationsByMarketId”访问 Odata。怎么做?

4

0 回答 0