组织Master-Detail控制器ASP.Net Web API

时间:2012-11-16 14:50:05

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

我正在尝试根据主人的ID确定实现详细记录检索的最佳方法。

显然,您将为主服务器和详细信息设置API控制器。

我考虑过的解决方案:

  • 让API使用者使用OData来获取按主ID过滤的所有详细信息。虽然我对这个解决方案没有任何问题,但我觉得很难把它放到API使用者身上,觉得它应该由API内部处理
  • 违反只有Get / Put / Post / Delete方法的惯例,并在详细控制器上创建“GetMastersDetails”操作,并通过路由访问它。虽然这肯定会有效,但我觉得这远离Web API的整个过程(在某种程度上)。
  • 创建一个名为“MastersDetailsController”的第三个控制器,它将具有基于具有不同可能返回类型的主ID的Get:
    • 这将返回详细ID列表,然后用于在详细信息控制器上调用Get以获取这些实际详细信息
    • 这将返回实际详细信息对象的列表。我不喜欢的是控制器返回的类型不同于它所基于的类型。

2 个答案:

答案 0 :(得分:0)

我选择#1或#2。

对于#1,OData支持不仅支持您描述的场景,还提供了将来可能需要的许多附加功能。

对于#2,我认为它不会脱离Web API的角度。也许有点来自真正的RESTful服务,但它易于实现且易于理解。

答案 1 :(得分:0)

选项2没问题。选项1会带来更多风险,具体取决于您的方案,以及您希望用户获取的内容。

向ApiController添加自定义方法并不是“违反惯例”。你可以随心所欲地做到这一点。如果您这样做并且使用了错误的HTTP方法(例如,当您在自定义方法中删除某些内容时使用GET),它将只是“违反惯例”。