2017-04-25 71 views
-1

得到了这个网址How do I use WebAPI/Rest correctly when other params are needed的Web API:需要了解网络API属性路由

我在网上API属性的新路由

[Route("customers/{customerId}/orders")] 
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... } 

or 

[Route("customers/{customerId}/orders/{orderId}")] 
public Order GetOrderByCustomer(int customerId, int orderId) { ... } 

的是第一和第二路线的意义的代码?

第一个和第二个url如何显示,请为上面的操作添加相同的网址?

谢谢

+0

.../customers/AB0123/orders/17254 其中AB0123是customerId,17254是orderId – Nsevens

+0

可以在这里找到完整的文档(它似乎是代码的来源):https://docs.microsoft .COM/EN-US/ASPNET/WEB-API /概述/ WEB-API的路由和行动/属性的路由功能于Web的API-2。实质上,这些路由定义了应映射到这些控制器操作的URL,并且大括号中的参数将这些路径段映射到同名控制器方法参数。 –

+0

@Nsevens你的答案是错误的,路由期望一个整数作为customerId,你没有通过一个。 –

回答

2

该路由是从应用程序基URL的偏移量。该路线可以包含由活页夹翻译的参数到您的方法参数。

所以第一路线,customers/{customerId}/orders将被称为https://someserver/customers/123/orders(路线= customers/123/orders),这将导致类似GetOrdersByCustomer(123)的呼叫。

第二条路线customers/{customerId}/orders/{orderId}将被称为https://someserver/customers/123/orders/456(路线= customers/123/orders/456),这将导致类似于GetOrderByCustomer(123, 456)的呼叫。

+0

我的问题为什么我应该在像https:// someserver/customers/123/orders这样的第一路添加order关键字,而不是我们可以像https:// someserver/customers/123'这也是有意义的........所以告诉我为什么命令需要在那里在URL? – Mou

+0

它并不是必须的,但如果添加它,则更容易理解。如果你接下来有这条路线怎么办? 'https:// someserver/customers/123/bills/456' –

+1

@Mou如果您不添加/订单我可以解释您想要检索客户实体,但是我添加/订单我解释您想要检索来自客户的订单。 –