我的实体名称是“Products”,但在我的WebApi中,路由被定义为“GetProducts”,因此默认情况下它将查询/ api / Products?而不是/ api / GetProducts,是否有任何方法可以指定从服务器获取数据的位置,如果它无法在缓存中找到我想要的内容。
到目前为止我得到了这个
manager.fetchEntityByKey("Products", productId, true)
.then(fetchSucceeded)
.fail(queryFailed);
这将调用http://localhost:1990/breeze/Products?$filter=Id%20eq%201
但我希望它改为呼叫http://localhost:1990/breeze/GetProducts?$filter=Id%20eq%201
答案 0 :(得分:2)
还有另一种选择在服务器上指定它。使用WebApi 2,您可以使用控制器操作上的RouteAttribute来自定义路由。
请参阅http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
编辑:
在客户端上,Breeze EntityType有一个名为defaultResourceName的属性,如果只指定了实体类型名称,您也可以修改它以告诉Breeze使用哪个默认资源名称。
var productType = metadataStore.getEntityType('Products');
productType.defaultResourceName = 'GetProducts';
//Will create fetch request to breeze/GetProducts
manager.fetchEntityByKey('Products', productId);
答案 1 :(得分:1)
您可以为给定实体类型设置资源,而不是命中资源 -
manager.metadataStore.setEntityTypeForResourceName('GetProducts', 'Products');
但是作为一个注释,为您的实体命名Products
而不是Product
似乎是一个设计漏洞。
答案 2 :(得分:1)
您可以使用
更改实体的默认resourceName(使用breeze webapi方法名称)manager.metadataStore.setEntityTypeForResourceName("GetProducts", "Product")
但是,当确认 manager.fetchMetadata()的承诺时,请确保执行上述代码:
manager.fetchMetadata().then(function(){
manager.metadataStore.setEntityTypeForResourceName(...);
})
如果在加载元数据之前调用setEntityTypeForResourceName
,您将收到错误,即
无法找到“产品
的'entityTypeName'