组织主细节控制器ASP.NETWebAPI
我试图确定基于船长ID检索详细记录的最佳方法 显然,您需要为主控和详细信息设置API控制器 我考虑过的解决方案:组织主细节控制器ASP.NETWebAPI,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我试图确定基于船长ID检索详细记录的最佳方法 显然,您需要为主控和详细信息设置API控制器 我考虑过的解决方案: 让API使用者使用OData来获得由主ID过滤的所有详细信息。虽然我对这个解决方案没有问题,但我觉得把它放到API使用者身上有点不好,我觉得这应该由API内部处理 违背只使用Get/Put/Post/Delete方法的惯例,在细节控制器上创建一个“GetMastersDetails”操作,并通过路由使其可访问。虽然这肯定会奏效,但我觉得这在某种程度上脱离了Web API的整个要点
- 让API使用者使用OData来获得由主ID过滤的所有详细信息。虽然我对这个解决方案没有问题,但我觉得把它放到API使用者身上有点不好,我觉得这应该由API内部处理
- 违背只使用Get/Put/Post/Delete方法的惯例,在细节控制器上创建一个“GetMastersDetails”操作,并通过路由使其可访问。虽然这肯定会奏效,但我觉得这在某种程度上脱离了Web API的整个要点
- 创建名为“MastersDetailsController”的第三个控制器,该控制器将基于具有不同可能返回类型的主ID创建Get:
- 它将返回一个细节ID列表,然后使用该列表调用细节控制器上的Get来获取这些实际细节
- 它将返回实际详图对象的列表。我不喜欢的是,有一个控制器返回与它所基于的类型不同的类型
对于#2,我不认为它偏离了Web API的观点。可能与真正的RESTful服务有些不同,但它易于实现和理解。选项2可以。选项1会带来更多的风险,这取决于您的场景,以及您希望让用户了解的内容 向ApiController添加自定义方法并不是真正的“违反约定”。你想怎么做都行。如果您这样做并且使用了错误的HTTP方法(即,在您的自定义方法中删除某些内容时使用GET),那么这将是“违反约定的”