Die*_*ros 3 rest asp.net-mvc asp.net-web-api
假设我有一个REST API端点:users/123/orders/234.
正如URI所暗示的那样,我正在为用户123返回234.我的问题是,哪个控制器应该处理请求?
它应该是UsersController中的一个动作,比如GetOrder(int userId,int orderId)?或者它应该在OrdersController中使用类似GetOrder (int id)的东西来处理?
这只是一种品味问题,还是比其他方式更"正确"?
好吧,我主张你应该去被提取的实体.
在你的情况下提取什么?:订单 - >所以OrdersController.
如果在给定特定订单ID的情况下提取用户,那么它将是一个UsersController.
您应该查看stackexchange api以获得很好的示例:http://api.stackexchange.com/docs
有很多动作,但它们每个都按照它们所操作的实体进行分组,我打赌它们是他们所在的控制器.
此路线没有内置设置.您可以执行以下操作:
这是一条特定的路线.
routes.MapHttpRoute(
name: "users_orders",
routeTemplate: "api/{controller}/{user_id}/Orders/{order_id}",
defaults: new
{
controller = "Orders",
action = "FetchByUser"
});
Run Code Online (Sandbox Code Playgroud)
哪个需要这样的动作方法:
public ActionResult FetchByUser(int user_id, int order_id)
{
}
Run Code Online (Sandbox Code Playgroud)
你可以尝试做一个更通用的路线,如下所示:
routes.MapHttpRoute(
name: "fetch_route",
routeTemplate: "api/{controller}/{id1}/{type}/{id2}",
defaults: new
{
action = "Fetch"
});
Run Code Online (Sandbox Code Playgroud)
而行动方法将是:
public ActionResult Fetch(int user_id, string type, int order_id)
{
}
Run Code Online (Sandbox Code Playgroud)
注意:我会解释这个 - > users/123/orders/234用户123得到订单234.如果@karan说你不需要用户上下文那么你就不应该有这个方法.我不确定你的设计或要求.
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |