我正在为我们的Web应用程序(当前项目)开发Web API服务。 Web API中的一个控制器将负责检索特定类型的实体列表。到现在为止还挺好。问题是我们有根据搜索条件过滤列表的请求。此搜索/过滤条件具有大约十二个不同的参数,其中一些参数可以为空。所以我想我创建了一个自定义类(让我们调用它" EntityFilterCriteria")然后我在Web应用程序端实例化它,用户输入的任何过滤字段(我留下用户做的那些)不输入设置为null)。现在我如何将此对象传递给我的Web API方法?我不想用所有参数构建一个URL,因为它会成为一个巨大的URL,加上一些参数可能会丢失。我不能在GET HTTP命令中有一个主体来序列化我的EntityFilterCriteria对象,那么我该怎么用? POST?它实际上不是POST,因为服务器端没有更新任何内容。它实际上是一个GET,就像在"获取符合此搜索条件的所有记录"。在这种情况下,常见的方法是什么?
谢谢, 埃迪
答案 0 :(得分:0)
将类序列化为JSON并将其发布到您的服务器,JSON字符串将成为您的帖子正文。一旦发布,您就可以反序列化为具有相同签名的类。大多数语言都有内置支持或可以为您执行此操作的免费第三方模块。
答案 1 :(得分:0)
使用GET进行此类请求的最初危险是,您可以发送的最长网址是保证在所有Web浏览器和服务器上工作的长度大约为1400字节。
我个人会使用JSON对所有过滤器参数进行编码,并将其提交给POST命令体中的服务器,因为发送的数据缺少大小限制。
虽然GET和POST命令之间存在语义差异,这是几十年前HTTP RFC编写时的意图,但这几十年的实际使用已经发生了相当大的变化(同样几乎没有人使用PUT或删除)
答案 2 :(得分:0)
我没有看到使用POST方法执行查询并获得结果的任何缺点。例如,ElasticSearch使用此方法对数据库执行查询。请参阅此链接,例如:http://exploringelasticsearch.com/searching_data.html。在REST中,POST不一定用于更新数据。
希望它有所帮助。 亨利