我正在为ERP系统编写一个WebApi OData服务(使用Microsoft.AspNet.OData
v6包),我遇到了一些问题。
该系统有多个模块(销售,采购,管理......),我试图在我的服务中反映这一点。
例如,我有一个实体“SalesOrders”和一个实体“PurchaseOrders”。它们彼此不同,我想通过不同的OData路径公开它们。
对于SalesOrders,我希望我的路线为~/odata/Sales/Orders
,而PurchaseOrders应位于~/odata/Purchase/Orders
下。
不幸的是我一直无法使用它,因为OData一直告诉我“Sales”和“Purchase”不是有效的OData路径段(这是正确的,因为这些不是我的实体):{{1 }}
我可以使用不同的模型,链接到不同的路径(使用找到的{B here找到的ModelBoundODataRoute的解决方法),但是我没有统一的Resource not found for segment 'Sales'
文档。我可能会编写一个自定义的ControllerSelector(可能是一个NamespaceAwareControllerSelector,或者可能使用某种标记属性),但这是一个完全不同的蠕虫,如果可能的话我宁愿避免。最后的办法是不要试图将其分开并使用名为PurchaseOrder,SalesOrder等的实体。
$metadata
有没有办法将字符串文字(不映射到资源)添加到OData路由前缀,同时保留单个统一的$ metadata文档?
答案 0 :(得分:0)
另一种选择可能是使用遏制来做到这一点
这将涉及一个名为Sales
的单例,其中包含一个名为Orders
的导航属性和一个名为Purchase
的单例,其中包含一个名为Orders
的导航属性。这确实提出了一个有趣的问题:当您使用URL Sales
请求单身~/odata/Sales
时应该返回什么,但它会为您提供您正在寻找的URL。有关详细信息,请参阅以下链接: