我正在使用ASP.NET的Web API框架实现REST API。我的API路由具有典型格式
$BASE_URI/api/resource1...
$BASE_URI/api/resource2...
$BASE_URI/api/resource3...
等。大多数(如果不是全部)路由也有一个带ID的可选前缀:
$BASE_URI/api/prefix/{id}/resource1...
$BASE_URI/api/prefix/{id}/resource2...
$BASE_URI/api/prefix/{id}/resource3...
如果未提供前缀,则API应使用默认值(如0),并且响应不需要授权。当提供前缀 时,必须授权该请求。
每次都以相同的方式处理前缀(但显然不同的资源处理方式不同)。有没有办法让我分别解析路由的prefix
组件,然后正常处理路由后缀?我试图避免我为每个资源重复路由条目的情况,其中唯一的区别是前缀处理。
如果您认为这是一个糟糕的设计,我也想听听。
提前致谢。
答案 0 :(得分:2)
您需要定义两条不同的路线,没有别的办法。
config.Routes.MapHttpRoute(
name: "DefaultApiWithPrefix",
routeTemplate: "api/prefix/{prefixId}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
答案 1 :(得分:1)
如果您使用的是Web API 2,则下面是属性路由的指南,否则没有简单的解决方法。
http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2