Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
组织主细节控制器ASP.NETWebAPI_Asp.net_Asp.net Web Api - Fatal编程技术网

组织主细节控制器ASP.NETWebAPI

组织主细节控制器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的整个要点

我试图确定基于船长ID检索详细记录的最佳方法

显然,您需要为主控和详细信息设置API控制器

我考虑过的解决方案:

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

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


对于#2,我不认为它偏离了Web API的观点。可能与真正的RESTful服务有些不同,但它易于实现和理解。

选项2可以。选项1会带来更多的风险,这取决于您的场景,以及您希望让用户了解的内容

向ApiController添加自定义方法并不是真正的“违反约定”。你想怎么做都行。如果您这样做并且使用了错误的HTTP方法(即,在您的自定义方法中删除某些内容时使用GET),那么这将是“违反约定的”