2

我需要为我的 api 控制器自定义操作,例如 api/{controller}/{action}/{id}

这是我的配置

config.Routes.MapHttpRoute(
    name: "DefaultMethodApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

config.Routes.MapHttpRoute(
    name: "ApiByAction",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { action = "Browse", id = RouteParameter.Optional }
);

这击中了默认路由 /api/dropzone/1 但我尝试通过“ApiByAction”配置击中 /api/dropzone/browse/1,但它不起作用。

4

1 回答 1

6

路由定义的顺序很重要,请确保尊重它,因为它们的评估顺序与您声明它们的顺序相同:

config.Routes.MapHttpRoute(
    name: "ApiByAction",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: new { action = @"^(?!\d)[a-z0-9]+$" }
);

config.Routes.MapHttpRoute(
    name: "DefaultMethodApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

另请注意,您可能需要{action}在第一个路由定义中为令牌指定约束。

于 2013-02-16T18:14:49.670 回答