带有自定义操作的API控制器

本文关键字:API 控制器 操作 自定义 | 更新日期: 2023-09-27 17:59:37

我需要为我的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,但它不起作用。

带有自定义操作的API控制器

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

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}令牌指定一个约束。