【问题标题】:Web API: Need to understand a web api attribute routingWeb API:需要了解一个web api属性路由
【发布时间】:2017-04-25 21:34:11
【问题描述】:

从这个网址How do I use WebAPI/Rest correctly when other params are needed获取代码

我是 web api 属性路由的新手

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

or  

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

1st 和 2nd route 是什么意思?

第一个和第二个 url 看起来如何,请为上述操作添加相同的 url?

谢谢

【问题讨论】:

  • .../customers/AB0123/orders/17254 其中 AB0123 是 customerId,17254 是 orderId
  • 可以在此处找到完整的文档(似乎是该代码的来源):docs.microsoft.com/en-us/aspnet/web-api/overview/…。本质上,这些路由定义了应该映射到这些控制器操作的 URL,大括号中的参数将这些路径段映射到同名的控制器方法参数。
  • @Nsevens 你的答案是错误的,路线需要一个整数作为 customerId 而你没有通过。
  • @JordiRuiz 确实,我的错 :)

标签: c# asp.net-web-api


【解决方案1】:

路由是从应用程序基本 URL 的偏移量。路由可以包含由活页夹转换为您的方法参数的参数。

所以第一条路由customers/{customerId}/orders 将被称为https://someserver/customers/123/orders (route = customers/123/orders),这将导致类似于GetOrdersByCustomer(123) 的调用。

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

【讨论】:

  • 我的问题是为什么我应该像https://someserver/customers/123/orders 这样在第一条路由中添加订单关键字,而不是我们可以编写像https://someserver/customers/123 这样的网址,这也很有意义........所以告诉我为什么订单需要在 url 中有吗?
  • 这不是必须的,但如果你添加它更容易理解。如果你接下来有这条路线怎么办? https://someserver/customers/123/bills/456
  • @Mou 如果你不添加 /orders 我可以解释你想要检索客户实体,但是添加 /orders 我解释你想要从客户那里检索订单。
  • 第二个网址实际上是检索客户和订单,但第一个网址只与客户有关,那么为什么需要订单关键字。请用一个简单的例子让我理解。谢谢
  • 第一个路由从一个特定客户那里获取订单,第二个路由从一个特定客户那里获取一个特定订单。
猜你喜欢
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多