我指的是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。怎么做?