API控制器具有自定义操作

时间:2013-02-16 18:13:22

标签: c# asp.net-mvc

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

1 个答案:

答案 0 :(得分: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}标记指定约束。