gpt4 book ai didi

json - 如何在 Web API Restful Get 方法中使用复杂参数

转载 作者:行者123 更新时间:2023-12-04 06:05:17 25 4
gpt4 key购买 nike

对于 Restful API,我需要使用 Get 来检索列表。但是,我想在该方法的输入中传递一些以下复杂参数

{
"Filters": [
{
"FieldName": "sample string 1",
"FieldValue": "sample string 2"
},
{
"FieldName": "sample string 1",
"FieldValue": "sample string 2"
}
],
"SortField": "sample string 1",
"SortValue": 0,
"Page": 2,
"PageSize": 3
}

参数将如何传递,因为我不能在 Get 方法中使用 RequestBudy,如果我将它设为 Post,它将不会是 Restful。

最佳答案

我完全反对在 URI 的查询字符串中使用序列化 JSON,原因如下:

  • 它使 URI 不是人类可读的(编码的括号和空格会生成可怕的查询字符串)
  • 它使参数不可组合(要添加另一个“过滤器”,您必须取消编码 JSON,将其反序列化为一个对象,添加新字段,然后再次序列化 + 编码)
  • 它创建了没有任何好处的长 URI(同样,JSON 的编码部分不必要使查询字符串增长)

  • 即使您可以将 POST 用于这样的目的,我相信如果您只想查询数据而不修改它,继续使用 GET 在语义上更正确。

    在像你描述的那样的许多情况下,我只是将我的复杂对象转换为分离的查询字符串参数,创建这样的 URI:
    http://myhost.com/query?filters.fieldName1=fieldValue1&filters.fieldName2=fieldValue2&sort=fieldName&sortDirection=asc&page=2&pageSize=3

    您可以使用自定义 ModelBinder 自定义 Paging 对象(包含执行查询服务器所需的任何数据)在 ASP.NET Web Api 2 中轻松解析此查询字符串(我想您正在使用此框架是因为您问题中的标记-边。

    作为替代方法,您可以考虑将这些参数放在自定义(或多个)请求 header 中,然后在服务器端读取它们:
    X-Query-Filter: FieldName1=FieldValue1&FieldName2=FieldValue2
    X-Query-Sort: FieldName
    X-Query-Sort-Direction: ASC
    X-Query-Page: 2
    X-Query-PageSize: 3

    关于json - 如何在 Web API Restful Get 方法中使用复杂参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37144843/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com