资源路径中的字符串文字

时间:2017-03-24 07:16:27

标签: c# asp.net-web-api2 odata

我正在为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文档?

1 个答案:

答案 0 :(得分:0)

另一种选择可能是使用遏制来做到这一点

这将涉及一个名为Sales的单例,其中包含一个名为Orders的导航属性和一个名为Purchase的单例,其中包含一个名为Orders的导航属性。这确实提出了一个有趣的问题:当您使用URL Sales请求单身~/odata/Sales时应该返回什么,但它会为您提供您正在寻找的URL。有关详细信息,请参阅以下链接:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-containment-in-web-api-22