gpt4 book ai didi

asp.net-mvc - REST API 嵌套资源应该由哪个 Controller 处理?

转载 作者:行者123 更新时间:2023-12-01 08:32:37 24 4
gpt4 key购买 nike

假设我有一个 REST API 端点: users/123/orders/234

正如 URI 所暗示的那样,我正在为用户 123 返回订单 234。我的问题是,哪个 Controller 应该处理请求?

它应该是 UsersController 中的一个操作,比如 GetOrder(int userId, int orderId) 吗?还是应该在 OrdersController 中使用 GetOrder(int id) 之类的方法处理它?

这只是品味问题,还是一种方式比另一种方式更“正确”?

最佳答案

好吧,我建议您应该使用正在获取的 实体

在您的情况下,正在获取什么? : 订单 -> 所以 OrdersController

如果在给定特定订单 ID 的情况下获取用户,那么它将是 UsersController

你应该看看 stackexchange api 的好例子:http://api.stackexchange.com/docs

有许多 Action ,但它们每个都按它们操作的实体分组,我敢打赌,这就是它们所在的 Controller 。

此路线没有内置设置。您可以执行以下操作:

这是具体路线。

routes.MapHttpRoute(
name: "users_orders",
routeTemplate: "api/{controller}/{user_id}/Orders/{order_id}",
defaults: new
{
controller = "Orders",
action = "FetchByUser"
});

这需要一个这样的操作方法:
public ActionResult FetchByUser(int user_id, int order_id)
{
}

你可以尝试做一个更通用的路线,如下所示:
routes.MapHttpRoute(
name: "fetch_route",
routeTemplate: "api/{controller}/{id1}/{type}/{id2}",
defaults: new
{
action = "Fetch"
});

Action 方法是:
public ActionResult Fetch(int user_id, string type, int order_id)
{
}

注意 :我会将这个 -> users/123/orders/234 解释为用户 123 获取订单 234 。如果@karan 说您不需要用户上下文,那么您不应该使用此方法。我不确定您的设计或要求。

关于asp.net-mvc - REST API 嵌套资源应该由哪个 Controller 处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16557054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com