我创建了一个WebApi 2 Web服务。 为了支持比某些端点的默认路由更复杂的路由,我添加了类似的内容:
config.Routes.MapHttpRoute(
name: "StatusApi",
routeTemplate: "api/{controller}/Status/{status}",
defaults: new { status = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DisplayUnitApi",
routeTemplate: "api/{controller}/DisplayUnit/{unit}",
defaults: new { status = RouteParameter.Optional }
);
我的意思是这些新路由不是针对所有端点,而是针对其中一些端点。 不幸的是现在所有端点都支持这些路由,但我更喜欢仅为我选择的端点保留 new 路由。
是否可以选择性?
一个例子:
POST api / DoAction
POST api / DoAction / Status
POST api / DoAction / Name / {unit}
在添加新路由之前,唯一可用的是POST api / DoAction。对于此控制器,我希望只保留原始端点可用。
谢谢, 罗伯特
答案 0 :(得分:1)
在Web API 2中,您具有归属路由:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
因此,您将地图路由到一般默认路线,并且具体操作将它们按照您的要求进行归属:
[httpPost, Route("api/DoAction")]
[httpPost, Route("api/DoAction/Status]
[httpPost, Route("api/DoAction/Name/{unit}]
答案 1 :(得分:0)
尝试以下代码
config.Routes.MapHttpRoute(
name: "StatusApi",
routeTemplate: "api/{controller}/Status/{status}",
defaults: new { controller = "xxxx", action = "yyyyy" });
config.Routes.MapHttpRoute(
name: "DisplayUnitApi",
routeTemplate: "api/{controller}/DisplayUnit/{unit}",
defaults: new { controller = "xxx", action = "yyyyy" });