2014-03-06 74 views
0

有一个人,请帮助我,我想设置asp.net网页API高级路由

我必须知道,如果我能和如何去配置路由列表,以便

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

{主机名}/{API部分} {I将多种类型的具有diiferent命令设备}因此

一些例子:

  • 本地主机/ API /设备/ 1 /命令/关断
  • 本地主机/ API /设备/ 1 /命令/导通
  • 本地主机/ API /设备/ 1 /信息/(将返回设备上的所有信息)
  • 本地主机/ API /设备/ 1 /信息/名称(将返回设备的名称)
  • 本地主机/ API /设备/ 1 /命令/显示/ 1(将在设备上显示1)

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

但底层结构是正确的。我想与设备特定的命令和选项

我不知道如何在一个控制器描绘这多台设备? 我想沿长控制器的东西每个设备 的该设备下我会像命令,信息等方面的不同部分 然后根据这些的每一个我woudl有作用的方法。

但我不知道该怎么做。

任何帮助将大大apperecited:

还什么是更好的做法:

[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; 
    } 

回答

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; 
} 
+1

我需要在我的路线设定中新增任何路线:

您可以在为了从路线获得参数如下前缀控制器行动?或者只是添加路由过滤器的工作? – Zapnologica