对于WebAPI 2 OData解决方案,我们需要能够映射以下路由类型:
〜/ odata / 1234erp / Products 表示Controller(或Entityset)段的前缀值。我的路线设置如下:
config.Routes.MapODataRoute(
routeName: "odata",
routePrefix: "odata/{tableid}/{controller}",
model: ModelBuilder.GetEdmModel(),
pathHandler: new DefaultODataPathHandler(),
routingConventions: conventions);
这使我的CustomControllerRoutingConvention中的SelectAction方法被命中(SelectController没有被命中)但odataPath参数计数0段,我希望它能识别像〜/ tableid / entityset /
现在我可以用
之类的东西来解决这个问题controllerContext.RequestContext.RouteData.Values["tableid"]
但是有更好的(类型更好?)解决方案吗?
编辑:
此外,由于ODataPath path = Request.GetODataPath()
返回0个段,因此不再可能为ODataQueryOptions派生EdmType需要...
答案 0 :(得分:1)
取消routePrefix的{controller}段,如下所示:"odata/{tableid}
似乎解决了这个问题。现在我可以像这样直接找到正确的控制器
if (firstSegment != null && firstSegment is EntitySetPathSegment)
{
return firstSegment.ToString();
}
在该控制器中,我可以将tableid作为参数:Get(string tableid)
更好的是,
ODataPath path = Request.GetODataPath();
IEdmType edmType = path.EdmType;
返回正确的EdmType ...