我有一个具有以下功能的 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 库而不是 native 库)。
public IHttpActionResult Employees([FromBody]SearchBindingModel searchOptions)
关于c# - 当查询字符串太复杂时,我们可以使用 HttpPost 代替 HttpGet 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640253/