1

我有以下网址:

本地主机/api/机器/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"
                           }
                   };
    }
}

以及以下路线:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
          name: "MachineApi",
          routeTemplate: "api/machine/{code}/all"
      );

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


    }
}

但由于某种原因,它没有解决 - 有什么明显的原因吗?

4

2 回答 2

2

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

config.Routes.MapHttpRoute(
      name: "MachineApi",
      routeTemplate: "api/machine/{code}/all",
      defaults: new { Action = "All", Controller = "Machine" }
  );
于 2012-12-14T11:18:06.420 回答
0

它从哪里获取代码?

 routeTemplate: "api/machine/{code}/all"

我假设那是失败的路线。

你不需要defaults:设置吗?

事实上,这不会默认为:

 api/machine/all/{code}

您是否尝试过在 Firefox 上查看“网络”选项卡?这将告诉你它试图去的路线。

于 2012-12-14T10:54:11.097 回答