有没有更好的方式在新的ASP.net MVC 4 WebApi处理嵌套的资源比为每个设置一个特殊的路由? (类似于这里:
ASP.Net MVC support for Nested Resources? – 这是在2009年发布)。
例如我想处理:
/ customers / 1 / products / 10 /
我看到一些ApiController动作命名除了Get(),Post()等的例子,例如here我看到一个动作的例子叫做GetOrder()。我找不到任何文档,虽然。这是一种实现这一点的方法吗?
解决方法
对不起,我更新了这个多次,因为我自己找到一个解决方案。
在默认路由下添加:
routes.MapHttpRoute( name: "OneLevelNested",routeTemplate: "api/{controller}/{customerId}/{action}/{id}",defaults: new { id = RouteParameter.Optional } );
然后,此路由将匹配任何控制器操作和URL中匹配的段名称。例如:
/ api / customers / 1 / orders会匹配:
public IEnumerable<Order> Orders(int customerId)
/ api / customers / 1 / orders / 123将匹配:
public Order Orders(int customerId,int id)
/ api / customers / 1 /产品将匹配:
public IEnumerable<Product> Products(int customerId)
/ api / customers / 1 / products / 123将匹配:
public Product Products(int customerId,int id)
重要的提示:
从评论
因为RC,你需要告诉每个动作哪些种类的动词是可以接受的,即[HttpGet]等。