wcf-data-services – 为什么我的oData响应没有导航属性
|
如果您查看以下示例oData Feed,您会看到包含“子”项的导航属性,以告诉您要遵循的URL:
例如,供应商0具有产品的导航属性.
我试图用ODataConventionModelBuilder和EntitySetController< Product>做同样的事情.所以当我请求oData / Product(0)时,它会显示产品的’features’: 我这样创建我的模型(基于GetImplicitEdmModel sample) // odata
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<RRStoreDB.Models.Product>("Product");
modelBuilder.EntitySet<RRStoreDB.Models.ProductFeature>("ProductFeature");
Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute","odata",model);
我为WebAPI创建了一个控制器: public class ProductController : EntitySetController<Product,int>
{
RRStoreDBContext _db = new RRStoreDBContext();
[Queryable]
public override IQueryable<DProduct> Get()
{
return _db.Products.AsQueryable();
}
public ICollection<ProductFeature> GetProductFeatures(int key)
{
Product product = _db.Products.FirstOrDefault(p => p.ProductId == key);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return product.ProductFeatures;
}
}
当我实际调用我的子属性的URL时,它工作并给我正确的功能列表: /oData/Products(18)/ProductFeatures 但是我希望/ oData / Products(18)中的导航属性指向这个. 我需要做些什么才能让它出现. This article说它是自动的,但我没有看到它们:
解决方法我认为问题是你要求application / json. web API中的application / json OData指向json light,这是最新的OData json表示,旨在减少响应有效负载大小并从响应中修剪不必要/冗余元数据.为了比较,尝试使用accept header application / json获取url~ / oData / Products(18); odata = verbose.现在,json light背后的想法是,如果链接可以计算,因为链接遵循约定,它将不会被放入响应中.导航链接/ oData / Products(18)/ ProductFeatures就是一个很好的例子.它遵循OData uri惯例. OData json light有3种模式,minimalmetadata(默认),fullmetadata和nometadata.名称本身就是解释性的.如果您希望链接在线路上,请使用accept header application / json; odata = fullmetadata发送请求. 请参阅此document以了解有关json灯的更多信息. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 当tryUpdateModel无法在asp.net mvc 3中更新
- asp.net-mvc – 如何测试MVC控制器的事件
- ASP MVC Razor在输入占位符中编码特殊字符
- asp.net-mvc – ASP.NET MVC模型/ ViewModel验证
- asp.net – MVC4默认路由指向某个区域
- asp.net-mvc-3 – @ Html.TextBoxFor文本框在验证失败后未突
- 在asp.net mvc上传文件代码后,通过服务器获
- asp.net-core – “netcoreapp1.0”是一个不受支持的框架.
- asp.net-mvc-3 – 如果在Razor中的else语句不起作用
- ASP.NET AJAX:在页面加载完成后触发UpdatePanel
