当查询字符串太复杂时,我们可以使用HttpPost而不是HttpGet吗
本文关键字:HttpPost HttpGet 可以使 我们 字符串 查询 复杂 | 更新日期: 2023-09-27 18:21:29
我有一个Asp.Net Web API
,具有以下函数
[HttpPost]
[Route("Employees")]
public IHttpActionResult Employees(SearchBindingModel searchOptions)
{
...
}
它是一个搜索员工的函数,因此它应该是HttpGet
而不是HttpPost
。问题是SearchBindingModel
非常复杂,我不知道如何将其写成查询字符串。
这个班级看起来像这个
public class SearchBindingModel
{
public IList<Criteria> Criterias { get; set; }
}
public class Criteria
{
...
}
public class FooCriteria : Criteria
{
...
}
public class BarCriteria : Criteria
{
...
}
既然查询字符串不能包含层次结构,我应该重新考虑我的Web API吗?
还是应该继续使用HttpPost
?
简而言之,在可能的情况下遵循最佳实践,但不要对此感到困惑。似乎您有一个使用POST的有效用例。"真正的RESTful"主要取决于对几个竞争标准的解释(http客户端和服务器,它们有着细微的不同等等)。
对于复杂的大型模型,有时使用GET是不切实际的,这取决于API的消费者(是否通过浏览器),您可能需要考虑查询字符串的浏览器URL长度限制,如上文所述https://stackoverflow.com/a/417184/1422377如果您要传递复杂模型的列表,这一点尤为重要。
或者,如果您真的必须使用GET,那么WEB API将接受Body中的模型,如下所示。然而,我建议谨慎行事,因为某些客户端将无法向get请求发送正文(例如,如果你的客户端是.net,他们将不得不使用RestSharp库而不是本地库)。
public IHttpActionResult Employees([FromBody]SearchBindingModel searchOptions)