我正在尝试确定根据master的ID实现详细记录检索的最佳方式。
显然,您需要为主数据和详细数据设置 API Controller 。
我考虑过的解决方案:
- 让 API 使用者使用 OData 来获取按主 ID 过滤的所有详细信息。虽然我对此解决方案没有意见,但将其交给 API 使用者有点感觉不好,并且觉得它应该由 API 内部处理
- 违背仅具有 Get/Put/Post/Delete 方法的惯例,并在详细信息 Controller 上创建“GetMastersDetails”操作,并使其可通过路由进行访问。虽然这肯定可行,但我觉得这(在某种程度上)偏离了 Web API 的全部意义。
- 创建一个名为“MastersDetailsController”的第三个 Controller ,该 Controller 将基于具有不同可能返回类型的主 ID 进行 Get:
- 这将返回详细信息 ID 列表,然后使用该列表调用详细信息 Controller 上的 Get 来获取这些实际详细信息
- 这将返回实际详细对象的列表。我不喜欢的是 Controller 返回的类型与其所基于的类型不同。
最佳答案
选项 2 就可以了。根据您的场景以及您希望用户了解的内容,选项 1 会带来更大的风险。
向 ApiController 添加自定义方法并不是真正的“违反惯例”。您可以随心所欲地这样做。如果您这样做并使用了错误的 HTTP 方法(即,当您在自定义方法中删除某些内容时使用 GET),那只会是“违反约定”。
关于asp.net - 组织主从 Controller ASP.Net Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13418934/