指定控制器

时间:2016-02-04 15:16:42

标签: web-services routing asp.net-web-api2

我创建了一个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。对于此控制器,我希望只保留原始端点可用。

谢谢, 罗伯特

2 个答案:

答案 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" });