【问题标题】:Web Api controller routingWeb Api 控制器路由
【发布时间】:2015-05-04 04:01:26
【问题描述】:

我有一个 ConfigurationController,其默认路由在静态 Register 方法中指定

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

此端点的 POST 方法创建一个带有字符串 id 的新配置,该字符串 id 可通过 url 访问 - 'api/configuration/newid'。

每个配置都可以有一个与之关联的“任务”。我现在想通过“TaskController”公开任务的 CRUD 操作。因此,如果我想为“newid”创建一个新任务,我可以通过在“api/configuration/newid/task”上发布来完成

我不知道如何在我的 Web API 项目中为此指定路由。

  • 路由应该是什么样的?
  • 这也是正确的方法,还是我应该通过显式端点“api/task”公开任务,尽管任务不能孤立存在。它们始终绑定到配置。

【问题讨论】:

    标签: c# rest asp.net-web-api asp.net-web-api2 asp.net-web-api-routing


    【解决方案1】:

    WebAPI 设置为 RESTful;也就是说,您使用 HTTP 动词与您的控制器对话,而不是命名操作(即 newconfig)。

    所以,要走您已经走的路线,而不是点击api/configuration/newconfig/task,您可能只需点击api/configuration 并使用HTTP POST 动词发送请求。然后,您发送的消息可能包含您正在创建的内容,例如:

    {
      type: 'Task',
      data: {
      }
    }
    

    但是,最好将Tasks 分离到它们自己的控制器中,即TasksController,并使用它们自己的仅作用于TasksGET, PUT, POST, DELETE 动词。然后,您将通过调用api/Tasks/ 来创建新的Tasks,并将消息正文作为您想要的任务。

    【讨论】:

    • 我不是特别喜欢单独的“任务”端点的想法,因为任务没有独立的存在。 'newconfig' 是指 POST 到 'api/configuration' 后新生成的 id。
    【解决方案2】:

    路由应该是什么样子的?

    routeTemplate: "api/configuration/{id}/task"
    

    这也是正确的方法,还是我应该通过显式端点“api/task”公开任务,尽管任务不能孤立存在。它们总是绑定到一个配置。

    我想你在声明Each configuration can have a 'Task' associated with it.时已经回答了这个问题

    如果您保持控制器“轻量级”并确保业务逻辑保存在其他地方,那么添加新的路由/控制器/动作就变得微不足道了。

    如果您愿意,可以将其保存在 ConfigurationTasks 控制器中,同时仍然拥有 ConfigurationTask 控制器。

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 2017-04-15
      • 1970-01-01
      • 2017-06-10
      • 2016-09-07
      • 2020-04-08
      相关资源
      最近更新 更多