指定控制器的 MapHttpRoute

MapHttpRoute for specified controller

我创建了一个 WebApi 2 网络服务。 为了支持比某些端点的默认路由更复杂的路由,我添加了如下内容:

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 }
);               

我的意思是这些新路线并非针对所有端点,而是仅针对其中一些端点。 不幸的是现在所有端点都支持这些路由,但我更愿意只为我选择的端点保留路由。

是否可以选择性

一个例子:

POST api/DoAction

POST api/DoAction/Status

POST api/DoAction/Name/{unit}

在添加新路线之前,唯一可用的是 POST api/DoAction。对于这个控制器,我只想保持原始端点可访问。

谢谢, 罗伯托

试试下面的代码

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

在网络中 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}]