c# - 将复杂参数传递到 GET 请求中

标签 c# asp.net-web-api http-method

我有一个名为 GetCats()[HttpGet] 网络 API 方法,它返回 Cat 对象的集合。

我添加了参数 skiptake 以允许分页。

但是要求增加了,现在必须有复杂过滤的可能性,在格式为 "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/

相关文章:

c# - 从 Azure 网站连接到 SSAS 多维数据集

c# - 我需要把.xlsx下载

c# - 防止 ASP.NET Web API 路由引擎扣除自定义方法名称

c# - 如何返回createatroute位置?

grails - 使用 grails spring security 通过 http 方法保护 URL

spring - Spring MVC 可以处理来自除 POST 和 GET 之外的 HTML 表单的请求吗?

c# - 在 c# wpf 中从 Memorystream 获取图像源

c# - 如何清除 WPF 中的 WebBrowser 控件

asp.net-mvc - 使用路由数据进行单元测试无法在 ASP.NET MVC 5 Web API 上运行

java - 如何从 Java 执行 HTTP 清除?