asp.net web api高级路由

时间:2014-03-06 10:25:14

标签: asp.net asp.net-mvc asp.net-web-api routing

有人可以帮助我解决我正在尝试设置的路线

我必须知道我是否可以以及如何配置路由列表以便

本地主机/ API /设备/ 1 /命令/导通

{hostname} / {api section} {我会使用不同的命令设置多种类型的设备}

一些例子:

  • localhost / api / device / 1 / commands / turnOff
  • 本地主机/ API /设备/ 1 /命令/导通
  • localhost / api / device / 1 / info /(将返回设备上的所有信息)
  • localhost / api / device / 1 / info / name(将返回设备名称)
  • localhost / api / device / 1 / commands / display / 1(将在设备上显示1)

以上只是我想要做的事情的随机例子。

但底层结构是正确的。我想让多个设备具有特定于设备的命令和选项

我不知道如何在控制器中描绘这个? 对于每个设备,我会想到控制器的长度 在该设备下我会有不同的部分,如命令,信息等 然后根据每一个我都有动作方法。

但我不知道该怎么做。

任何帮助都会非常吸引人:

还有什么是更好的做法:

[HttpGet]
    public HttpStatusCode Arm()
    {
        return HttpStatusCode.OK;
    }

    [HttpGet]
    public HttpStatusCode StayArm()
    {
        return HttpStatusCode.OK;
    }

    [HttpGet]
    public HttpStatusCode Disarm()
    {
        return HttpStatusCode.OK;
    }

或:

 [HttpGet]
    public HttpStatusCode Command(string command)
    {
        switch (command)
        {
            case "arm":
                {

                }
                break;
            case "disarm":
                {

                }
                break;                    
        }
        return HttpStatusCode.OK;
    }

1 个答案:

答案 0 :(得分:2)

方法1是更好的做法。它使您的代码更具可读性,可维护性和可测试性。

每个设备都没有控制器。你应该拥有的是一个控制器,它查询设备的数据库或服务,然后在该设备上执行操作。

您可以使用以下命令为控制器操作添加前缀,以便从路径中获取参数:

[HttpGet]
[Route("device/{deviceId}/commands/turnOff")]
public HttpStatusCode TurnOff(int deviceId)
{
    // 1. Find device by deviceId
    // 2. Turn the device off
    return HttpStatusCode.OK;
}