[英]Custom Routing with ASP.NET Web API
假设我有一个嵌套的一对多类型的层次结构数据库,如下所示:
一个地区有许多国家 ; 每个国家都有很多城市 ; 一个城市必须属于唯一的一个国家。
将这些信息抽象为RDBMS是一项微不足道的工作,但(在我看来)最合理的REST端点返回给定区域id的国家列表将如下所示:
HTTP GET http://localhost/Region/3/Countries
默认情况下,.NET Web API的路由最多只能是http://localhost/Countries/Region/3
或http://localhost/Region/Countries/3
。
我应该遵循一个合理的命名约定,或者路由是否可以自定义以允许URI采取我喜欢的任何形状?
路由应该可以自定义,以获取您正在寻找的URL。 假设您想要“http:// localhost / Region / 3 / Countries”形式的URL,您可以注册此自定义路由:
config.Routes.MapHttpRoute("MyRoute", "Region/{regionId}/Countries", new { controller = "Region", action = "GetCountries" });
这会将请求发送到'RegionController'类的'GetCountries'操作。 您可以在操作中拥有regionId参数,该参数将从URI自动为您获取模型。
您可能希望在线查找WebAPI的属性路由包,因为它可能更适合您的情况。
路由应该非常灵活 - 问题在于您希望如何提供数据。 你有一个控制器还是多个控制器?
如果您有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路由和-动作/路由功能于ASPNET-Web的API
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.