Routing web api路由

Routing web api路由,routing,asp.net-mvc-4,asp.net-web-api,Routing,Asp.net Mvc 4,Asp.net Web Api,我有以下网址: localhost/api/machine/somecode/all 我有以下控制器: public class MachineController : ApiController { public IEnumerable<Machine> Get() { return new List<Machine> { new Machine

我有以下网址:

localhost/api/machine/somecode/all

我有以下控制器:

 public class MachineController : ApiController
{
    public IEnumerable<Machine> Get()
    {
        return new List<Machine>
                   {
                       new Machine
                           {
                               LastPlayed = DateTime.UtcNow,
                               MachineAlertCount = 1,
                               MachineId = "122",
                               MachineName = "test",
                               MachinePosition = "12",
                               MachineStatus = "test"
                           }
                   };
    }

    public IEnumerable<Machine> All(string code)
    {
        return new List<Machine>
                   {
                       new Machine
                           {
                               LastPlayed = DateTime.UtcNow,
                               MachineAlertCount = 1,
                               MachineId = "122",
                               MachineName = "test",
                               MachinePosition = "12",
                               MachineStatus = "test"
                           }
                   };
    }
}

但由于某些原因,它无法解决问题——有什么显而易见的原因吗?

这行代码是从哪里来的

 routeTemplate: "api/machine/{code}/all"
我认为这是一条失败的路线

您是否不需要
默认设置:
设置

事实上,这不是默认的:

 api/machine/all/{code}

你试过在Firefox上查看网络标签吗?这将告诉你它试图去的路线。

是的,通过使用方法名,你推断出一个动作,你还需要指出要匹配的控制器,这样可能会起作用:

config.Routes.MapHttpRoute(
      name: "MachineApi",
      routeTemplate: "api/machine/{code}/all",
      defaults: new { Action = "All", Controller = "Machine" }
  );

您好-谢谢您-不幸的是,URL是由一个遗留服务设置的:\hi。很公平,但我的第一部分应该允许你的其他方法工作。更新以删除通知。
config.Routes.MapHttpRoute(
      name: "MachineApi",
      routeTemplate: "api/machine/{code}/all",
      defaults: new { Action = "All", Controller = "Machine" }
  );