12

假设我有一个嵌套的一对多类型的层次结构数据库,如下所示:

一个地区有很多国家;每个国家都有许多城市;一个城市必须属于一个且仅属于一个国家。

将此信息抽象到 RDBMS 中是一个简单的练习,但(在我看来)返回给定区域 id的国家列表的最明智的 REST 端点将类似于以下内容:

HTTP GET http://localhost/Region/3/Countries

默认情况下,.NET Web API 的路由最多是 .NEThttp://localhost/Countries/Region/3http://localhost/Region/Countries/3.

是否有我应该遵循的合理命名约定,或者路由是否可自定义以允许 URI 采用我喜欢的任何形状?

4

2 回答 2

22

路由应该是可定制的,足以获得您正在寻找的 URL。假设您想要“http://localhost/Region/3/Countries”形式的 URL,您可以注册此自定义路由:

config.Routes.MapHttpRoute("MyRoute", "Region/{regionId}/Countries", new { controller = "Region", action = "GetCountries" });

这会将请求分派到“RegionController”类上的“GetCountries”操作。您可以在从 URI 自动为您绑定模型的操作上有一个 regionId 参数。

您可能想在线查找 WebAPI 的属性路由包,因为它可能更适合您的情况。

于 2013-01-15T13:58:01.630 回答
3

路由应该非常灵活——问题是您希望如何提供数据。您心中有一个控制器还是多个控制器?

如果你有一个 RegionController 我不明白为什么你不能配置一个路由:

routes.MapHttpRoute(
    name: "CountryList",
    routeTemplate: "{controller}/{regionId}/countries"
);

以及对应的方法:

public CountryCollection Get(int regionId)

还是我在您的问题中遗漏了什么?您的默认路由来自哪里?

看看他们的文档:

http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection http://www.asp.net/web-api/overview/web -api-routing-and-actions/routing-in-aspnet-web-api

于 2013-01-15T13:57:13.127 回答