Asp.net mvc 4 MVC 4路由:由于api\controller\action\id和api\controller\id导致多个匹配错误

Asp.net mvc 4 MVC 4路由:由于api\controller\action\id和api\controller\id导致多个匹配错误,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc 4,Asp.net Mvc Routing,我正在尝试设置路由配置,但出现异常“找到多个与请求匹配的操作:” 当我转到/api/Devices/{id}时会出现错误 我知道罪魁祸首方法-GetParts。为什么它仍然作为控制器/id的可能匹配触发?如何使其停止,或者仅应用get方法 public Devices Get(int id) { return Uow.Distribution.Devices.GetById(id); } [ActionName("GetParts")]

我正在尝试设置路由配置,但出现异常“找到多个与请求匹配的操作:”

当我转到/api/Devices/{id}时会出现错误

我知道罪魁祸首方法-GetParts。为什么它仍然作为控制器/id的可能匹配触发?如何使其停止,或者仅应用get方法

    public Devices Get(int id)
    {
        return Uow.Distribution.Devices.GetById(id);
    }

    [ActionName("GetParts")]
    public IEnumerable<DeviceParts> GetParts(int id)
    {
        return Uow.Distribution.Devices.GetParts(id);
    }
谢谢

        routes.MapHttpRoute(
            name: ControllerOnly,
            routeTemplate: "api/{controller}"
            );

        routes.MapHttpRoute(
            name: ControllerAndId,
            routeTemplate: "api/{controller}/{id}",
            defaults: null,
            constraints: new { id = @"^\d+$" }
        );

        routes.MapHttpRoute(
            name: ControllerAction,
            routeTemplate: "api/{controller}/{action}"
        );

        routes.MapHttpRoute(
            name: ControllerActionAndId,
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { id = @"^\d+$" }
        );