繁体   English   中英

使用ASP.NET Web API进行自定义路由

[英]Custom Routing with ASP.NET Web API

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

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

将这些信息抽象为RDBMS是一项微不足道的工作,但(在我看来)最合理的REST端点返回给定区域id的国家列表将如下所示:

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

默认情况下,.NET Web API的路由最多只能是http://localhost/Countries/Region/3http://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM