我有一个名为 GetCats()
的 [HttpGet]
网络 API 方法,它返回 Cat
对象的集合。
我添加了参数 skip
和 take
以允许分页。
但是要求增加了,现在必须有复杂过滤的可能性,在格式为 "PropertyName", "Value", "Type"
的过滤器集合的情况下,例如。 "CatName"、"Mittens"、"EqualTo"
和格式为 "PropertyName"、"Direction"
的排序过滤器,例如“CatAge”,“降序”
。
Skip and Take 也是必需的。
构建此过滤器对象时,它可能非常大且复杂。因此,似乎不再将其放入 QueryString 中是可行的,尤其是在有多个过滤器的情况下,因为您需要一种方法将它们组合在一起。
我正在寻找解决方案 - 我想我可以使用 [HttpPost]
并只发布过滤器,但对于 HTTP 方法来说似乎是错误的。我不确定我是否可以以某种方式将对象编码到查询字符串中并优雅地对其进行解码。
有人可以建议解决这个问题吗?我怀疑将复杂参数传递到 GET 以检索数据集合一定是一个常见问题。
最佳答案
我认为对于大多数实际查询情况,您可以坚持使用常规查询参数。
IIS 中的默认查询字符串限制为 2048。默认情况下,这对于 40-100 个单独的查询字符串参数来说已经相当长了,如果您保持名称简短,则更多。您也可以根据需要增加它 - IIS Request Limits .
如果参数足够复杂,您可以将其转换为 JSON 并作为单个查询参数。
除非您有意识形态上的反对意见(例如“必须是 REST 接口(interface)”)或技术原因(例如您需要缓存并且您的 CDN 不允许缓存 POST 请求),否则发布您的参数没有任何问题。或者,如果您想坚持使用 GET,则可以在 header 中放置更多参数(但这感觉很老套,而且不会给您带来太多好处)。
关于c# - 将复杂参数传递到 GET 请求中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43350504/