gpt4 book ai didi

asp.net-web-api - asp.net web api路由设计(多路由)

转载 作者:行者123 更新时间:2023-12-02 03:50:03 24 4
gpt4 key购买 nike

我目前正在使用 ASP.NET Web API 设计 REST api。

我想提供这样的方法(http 方法无关紧要 - 应该适用于所有人):

  • /api/客户端
  • /api/client/CID1234 (CID1234 = Id)
  • /api/client/CID1234/orders(订单= Action )

问题是:Id 应该是可选的 -/api/client 可能会返回一个客户端列表Action 也应该是可选的 - 在一种情况下我想获得一个特定的客户,在另一种情况下我想对该客户执行特定的操作。 (RPC 风格)

我不认为我可以使用约束,因为我使用的“ID”看起来非常不同。

此方法无效:

config.Routes.MapHttpRoute(
name: "RpcStyleApi",
routeTemplate: "rest/{controller}/{action}",
defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional }
);

这种方法也不起作用:

config.Routes.MapHttpRoute(
name: "RpcStyleApi",
routeTemplate: "rest/{controller}/{action}"
);

config.Routes.MapHttpRoute(
name: "RpcStyleApi2",
routeTemplate: "rest/{controller}/{id}/{action}",
defaults: new { action = RouteParameter.Optional }
);

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "rest/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

例如,这会返回 404,因为它无法区分“action”和“id”。“在与名称“CID1234”匹配的 Controller “客户端”上未找到任何操作。

为了获得我需要的灵 active ,我应该使用自定义 Actionselector 吗?或者是否有可能使用 Web API 内置功能?我知道有人可能想将订单作为一个单独的实体使用。但我也可能在那里有真正的“行动”(而不是“实体”)。像“lostpassword”、“changepassword”等等..

谢谢你的建议

P.S.:类似于描述的 here不完全是我愿意做的事情。糟糕的 API 设计。

最佳答案

这实际上是构建 Restful API 时的最佳实践之一,这里有一段视频介绍了构建 API 时要考虑的不同方面 https://www.youtube.com/watch?v=ZpqCN8iO9Y8

解决方案:你不需要改变你的映射路由,你所需要的只是使用每个方法之上的方法属性,如下所示

\\ api/clients [this should be clients not client if its returning a list]
[Route("api/clients")]
public IHttpActionResult Get()
{
return Ok("here you list of clients");
}

/api/client/CID1234 (CID1234 = Id)
[Route("api/clients/{Id}")]
public IHttpActionResult Get(string Id)
{
return Ok("use the Id to retrieve the client details");
}

/api/client/CID1234/orders (orders = action)
[Route("api/clients/{Id}/orders")]
public IHttpActionResult GetOrders(string Id)
{
return Ok("use the Id to retrieve the client orders");
}

关于可选的,现在您在获取其值时在方法内构建自己的逻辑。

这篇文章有关于这一点的更多细节

https://aspnetwebstack.codeplex.com/wikipage?title=Attribute%20Routing%20in%20MVC%20and%20Web%20API

PS:这是使用 .Net framework 4.5.2 使用 owin

关于asp.net-web-api - asp.net web api路由设计(多路由),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724227/

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